как исправить connectionManager.activeNetworkInfo не должно быть нулевым?используя kotlin - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь проверить подключение и выполнить некоторые действия в каждом состоянии, но когда я выключаю соединение в моем мобильном телефоне, происходит сбой приложения, и это выдает мне эту ошибку 'cnxManager .activeNetworkInfo не должен быть нулевым'

Мой код

private fun isConnected(webView: WebView){
    val cnxManager : ConnectivityManager = baseContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val netInfo : NetworkInfo = cnxManager.activeNetworkInfo

    if (netInfo.isConnected && netInfo.isConnectedOrConnecting){
        cnx_failed.visibility=View.INVISIBLE
        webView.visibility=View.VISIBLE
    }else{
        webView.visibility=View.INVISIBLE
        cnx_failed.visibility=View.VISIBLE
    }
}

1 Ответ

0 голосов
/ 24 октября 2018

Это связано с тем, что в Kotlin называется «тип платформы».Поскольку getActiveNetworkInfo() не аннотируется как @Nullable или @NonNull, вы можете объявить его как любой тип.Таким образом, оба:

val netInfo: NetworkInfo = cnxManager.activeNetworkInfo

и

val netInfo: NetworkInfo? = cnxManager.activeNetworkInfo

являются действительными декларациями.Однако, как отметил Маркус, этот метод может вернуть null, поэтому вы должны объявить его как последний (обнуляемый тип).Каждый раз, когда вы взаимодействуете с типами платформы Java, вы должны быть уверены, что объявили его правильно.

Имея это в виду, вы можете переписать свой код как:

private fun updateConnectionStatus(webView: WebView) {
    val cnxManager = baseContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    // Declare as a nullable type
    val netInfo : NetworkInfo? = cnxManager.activeNetworkInfo

    // Safe check -- assigns to false if netInfo is null
    val connected = netInfo?.isConnectedOrConnecting ?: false
    cnx_failed.visibility = if (connected) View.INVISIBLE else View.VISIBLE
    webView.visibility = if (connected) View.VISIBLE else View.INVISIBLE
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...