You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ConnectivityManager检测网络状态时断网返回null致异常原因

为什么网络断开时调用isNetworkAvailable()会抛出java.lang.IllegalStateException: networkInfo must not be null?

嘿,这个问题我之前排查过,其实原因很直接:当设备完全没有网络连接的时候,connectivityManager.activeNetworkInfo会返回null,而你直接调用了networkInfo.isConnected——相当于对着一个不存在的对象调用方法,Kotlin的非空检查自然就会抛出这个异常啦。

具体原因拆解:

  • Android系统的设计就是这样:当没有活跃的网络连接(不管是WiFi还是移动数据)时,activeNetworkInfo不会返回一个“断开状态”的对象,而是直接返回null,表示根本没有对应的网络信息。
  • 你的代码里没有提前判断networkInfo是否为null,就直接访问它的isConnected属性,Kotlin默认要求变量非空,所以一旦实际值是null,就会触发这个IllegalStateException。

修复方案来啦!

方案1:快速修复旧代码(兼容低版本)

只需要在访问isConnected之前先判断networkInfo不为null就行:

private fun isNetworkAvailable(): Boolean {
    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE)
    return if (connectivityManager is ConnectivityManager) {
        val networkInfo = connectivityManager.activeNetworkInfo
        // 先判空,再检查连接状态
        networkInfo != null && networkInfo.isConnected
    } else false
}

方案2:推荐使用官方新API(适配Android 6.0+,尤其Android 10+)

因为activeNetworkInfo在Android 10(API 29)已经被废弃了,官方更推荐用NetworkCapabilities来判断,还能更精准地检测网络是否真的能访问互联网(比如避免连接到需要登录的公共WiFi却无法上网的情况):

private fun isNetworkAvailable(): Boolean {
    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
    // 如果连ConnectivityManager都拿不到,直接返回无网络
    connectivityManager ?: return false

    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val activeNetwork = connectivityManager.activeNetwork ?: return false
        val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
        // 检查网络是否具备访问互联网的能力,且已经验证可用
        networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
                networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
    } else {
        // 兼容Android 6.0以下的旧逻辑
        val networkInfo = connectivityManager.activeNetworkInfo
        networkInfo != null && networkInfo.isConnected
    }
}

内容的提问来源于stack exchange,提问作者CEO tech4lifeapps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:33:32