【问题标题】:ConnectivityManager null pointer连接管理器空指针
【发布时间】:2013-09-11 15:50:06
【问题描述】:

在此处显示的代码中出现空指针问题。通常空指针是一个简单易修复的东西,但是在这种情况下,我完全迷失了原因。

nullPointer 在这一行:

dataConnectionStatus = connManager.getActiveNetworkInfo().isConnected();

下面显示的代码位于 onCreate 方法的开头。我之前使用过类似的代码来检查 wifi 连接是否处于活动状态。在这种情况下,我需要检查 wifi 或 3g 数据连接是否处于活动状态。

空指针崩溃的情况是wifi和3g移动数据都关闭时。在这种情况下如何避免null?

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

 boolean dataConnectionStatus = false;

if(connManager!=null){
dataConnectionStatus = connManager.getActiveNetworkInfo().isConnected(); //<-NULL
}

【问题讨论】:

  • 不需要检查 connManager != null。它永远是 != null。在您的示例中可以为 null 的是 connManager.getActiveNetworkInfo() 的返回对象。

标签: android nullpointerexception connectivity


【解决方案1】:

getActiveNetworkInfo() 正在返回 null

正如文档所说,

返回有关当前活动的默认数据网络的详细信息。什么时候 已连接,此网络是传出连接的默认路由。 在启动网络之前,您应该始终检查 isConnected() 交通。当没有默认网络时,这可能会返回 null。

因此,请确保您可以访问活动网络。

您可以尝试以下操作:

    public static boolean isInternetAvailable(Context cxt) {

    ConnectivityManager cm = (ConnectivityManager) cxt
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo netInfo = cm.getActiveNetworkInfo();

    if (netInfo != null && netInfo.isConnectedOrConnecting()) {

        Log.i("NetworkStatus :", "Network connection available.");
        return true;
    }

    return false;
}

【讨论】:

    【解决方案2】:

    像这样尝试...在这种情况下,connManager 被初始化并且不太容易出现异常

    ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    
        if (mWifi.isAvailable() == false && mMobile.isAvailable() == false) {
            showDialog(DIALOG_NETWORK_UNAVAILABLE);
        }
    

    【讨论】:

      【解决方案3】:

      检查您是否有任何可用的活动网络。如果不只是将其显示为 Toast 或要求激活任何一个。

      if(connManager!=null && connManager.getActiveNetworkInfo() != null){
          dataConnectionStatus = connManager.getActiveNetworkInfo().isConnected();
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 2017-07-23
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多