我正在尝试检查连接性并在每种状态下执行一些操作,但是当我在手机中打开连接时,应用崩溃了,它给了我这个错误“cnxManager .activeNetworkInfo不能为null”
我的密码
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
}
}
最佳答案
这是由于Kotlin中所谓的“平台类型”。由于getActiveNetworkInfo()
未被注释为@Nullable
或@NonNull
,因此您可以选择将其声明为任一类型。因此,两者:
val netInfo: NetworkInfo = cnxManager.activeNetworkInfo
和
val netInfo: NetworkInfo? = cnxManager.activeNetworkInfo
是有效的声明。但是,正如Markus所提到的,此方法可以返回
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
}