Это связано с тем, что в 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
}