5

ここに示すコードでヌル ポインターの問題が発生します。通常、null ポインターは単純で簡単に修正できますが、この場合、原因が完全にわかりません。

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 に答える