gpt4 book ai didi

android - 如何修复 connectionManager.activeNetworkInfo 不能为空?使用 Kotlin

转载 作者:行者123 更新时间:2023-11-29 16:34:18 27 4
gpt4 key购买 nike

我正在尝试检查连接并在每个状态下执行一些操作,但是当我关闭手机中的连接时,应用程序崩溃并给我这个错误“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
}
}

最佳答案

这是由于 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
}

关于android - 如何修复 connectionManager.activeNetworkInfo 不能为空?使用 Kotlin ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52970538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com