2013-09-11 1 views
5

Получение проблемы с нулевым указателем в приведенном здесь коде. обычно нулевой указатель - это простая и легкая вещь для исправления, однако в этом случае я полностью потерял причину.ConnectivityManager null pointer

NullPointer находится на этой линии:

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

код, показанный ниже, расположен в начале OnCreate метода. Ранее я использовал аналогичный код, чтобы проверить, активно ли соединение Wi-Fi. в этом случае мне нужно проверить, активировано ли соединение Wi-Fi или 3g.

ситуация, при которой происходит сбой с нулевым указателем, заключается в отключении мобильных данных Wi-Fi и 3g. как избежать нулевой в этой ситуации?

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 

boolean dataConnectionStatus = false; 

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

ответ

2

Проверьте, есть ли у вас активная сеть в наличии. Если вы не просто покажете это как Toast или попросите активировать его.

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

getActiveNetworkInfo() возвращается null.

Как говорит документация,

Возвращает сведения о текущей активной сети передачи данных по умолчанию. Когда подключено , эта сеть является маршрутом по умолчанию для исходящих соединений. Вы должны всегда проверять isConnected() перед запуском сети трафик. Это может вернуть значение null, когда нет сети по умолчанию.

Следовательно, plz убедитесь, что у вас есть доступ к активной сети.

Вы можете попробовать следующее:

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; 
} 
3

Попробуйте, как это ... В этом casethe connManager получает intialised и менее склонны к исключению

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); 
    }