5

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

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
}
4

3 回答 3

3

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;
}
于 2013-09-11T07:49:01.457 回答
3

像这样尝试......在这种情况下,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);
    }
于 2013-09-11T07:50:06.007 回答
1

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

if(connManager!=null && connManager.getActiveNetworkInfo() != null){
    dataConnectionStatus = connManager.getActiveNetworkInfo().isConnected();
}
于 2013-09-11T07:47:14.853 回答