Попытка отобразить Alertdialog с помощью Kodein без интернета - PullRequest
0 голосов
/ 16 февраля 2020

Я новичок в использовании шаблона MVVM, и я использовал кодеин в своем приложении. Однако мне нужно отобразить диалоговое окно с предупреждением NO INTE RNET CONNECTION.

Мне удалось реализовать перехватчик сетевого подключения, но я не знаю, как отобразить диалоговое окно с предупреждением в моем классе без активности / фрагмента. Пожалуйста, помогите мне. Буду очень признателен за вашу помощь

Это мой класс приложения

class MVVMApplication : Application(), KodeinAware {

    var mAppConfig:MVVMApplication? = null

    @RequiresApi(Build.VERSION_CODES.O)
    override val kodein = Kodein.lazy {

        import(androidXModule(this@MVVMApplication))

        bind() from singleton {
            NetworkConnectionInterceptor(
                instance()
            )
        }
        bind() from singleton { MyApi(instance()) }
        bind() from singleton {
            AppDatabase(
                instance()
            )
        }
        bind() from singleton { LoginRepository(instance(), instance()) }
        bind() from singleton { CommentsRepository(instance(), instance()) }
        bind() from singleton { JobsRepository(instance(), instance(), instance()) }
        bind() from singleton { FeedsRepository(instance(), instance(), instance()) }
        bind() from singleton { BidsRepository(instance(), instance(), instance()) }
        bind() from singleton { SearchRepository(instance(), instance()) }
        bind() from singleton { NotificationsRepository(instance(), instance(), instance()) }
        bind() from singleton { LoginViewModelFactory(instance()) }
        bind() from provider { CompaniesRepository(instance(), instance()) }
        bind() from provider { JobsViewModelFactory(instance(), instance()) }
        bind() from provider { BidsViewModelFactory(instance(), instance()) }
        bind() from provider { FeedsViewModelFactory(instance(), instance()) }
        bind() from provider { CommentsViewModelFactory(instance(), instance()) }
        bind() from provider { CompaniesViewModelFactory(instance(), instance()) }
        bind() from provider { NotificationsViewModelFactory(instance(), instance()) }
        bind() from provider { SearchViewModelFactory(instance(), instance()) }

    }

    /*override fun onCreate()
    {
        super.onCreate()
        mAppConfig=this


    }

    fun getInstance(): MVVMApplication? {
        return mAppConfig
    }

    companion object {
        const val DEBUG = true
        var instance: MVVMApplication? = null
            private set
    }*/



}

Это мой класс сети, где я пытаюсь отобразить диалоговое окно с предупреждением при отсутствии соединения. Все хорошо, но диалоговое окно с предупреждением выдает ошибку

class NetworkConnectionInterceptor(
   var context: Context
) : Interceptor {

     val applicationContext = context.applicationContext

    @RequiresApi(Build.VERSION_CODES.M)
    override fun intercept(chain: Interceptor.Chain): Response {
        if (!isInternetAvailable())
        {
            noInternetDialogue()
            throw NoInternetException("Make sure you have an active data connection")
        }
        return chain.proceed(chain.request())
    }

    @RequiresApi(Build.VERSION_CODES.M)
    private fun isInternetAvailable(): Boolean {
        var result = false
        val connectivityManager =
            applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
        connectivityManager?.let {
            it.getNetworkCapabilities(connectivityManager.activeNetwork)?.apply {
                result = when {
                    hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                    hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                    else -> false
                }
            }
        }
        return result
    }


    fun noInternetDialogue() {

        Handler(Looper.getMainLooper()).post(Runnable {
            var alertDialog = AlertDialog.Builder(context);
            alertDialog.setTitle("No Active Internet!!")
                //alertDialog.setMessage("Enter the reason the rejection");

                .setNegativeButton("Cancel") { dialog, id -> dialog.dismiss() }

            val dialog: AlertDialog = alertDialog.create()
            dialog.window?.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)

            dialog?.show()
             //Toast.makeText(context,"no internet",Toast.LENGTH_LONG).show()
        })


    }

}

, пожалуйста, помогите мне. Ваша помощь будет высоко ценится. Заранее спасибо

...