9

接続マネージャーで null ポインター例外が発生することがあります。インテント サービスから isOnWIFI(this) でネットワーク状態を確認します。cm.getActiveNetworkInfo() 行で例外が発生します。これを呼び出す前に null をチェックするので、奇妙です。注: 権限が設定されています。

public static boolean isOnWIFI(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        return cm != null
                //here occurs NullPointerException
                && cm.getActiveNetworkInfo() != null
                && ((cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && cm.getNetworkInfo(
                        ConnectivityManager.TYPE_WIFI).isConnected()));

}

なぜこれが起こるのか考えていますか?バグレポートから時折発生するため、デバッグできません。私が見る唯一の解決策は、それをtry catchブロックに入れることです。ありがとう。

4

6 に答える 6

3
Try this. Read more here

http://developer.android.com/training/basics/network-ops/managing.html

public static boolean isOnWIFI(Context context) {

 ConnectivityManager cm = (ConnectivityManager) this.getSystemService(context.CONNECTIVITY_SERVICE);

 if(cm != null){

   NetworkInfo networkInfo = cm.getActiveNetworkInfo();

   boolean isWiFi = networkInfo.getType() == ConnectivityManager.TYPE_WIFI;

   // if user is connected to network
   if (isWifi) {  
      return true;

   }else {
     return false;

   }

 }
 else{
    //cm is null 
    return false

 }  
}
于 2013-05-06T11:37:56.143 に答える
3

getActiveNetworkInfo docs >> getActiveNetworkInfoに従って利用可能なデフォルト接続がない場合は null を返します。したがって、以下のようにネットワークを個別に確認することをお勧めします。

NetworkInfo WiFiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

次に、それらが利用可能かどうかを確認します

if(mobileInfo != null &  mobileInfo.isConnectedOrConnecting() || WiFiInfo != null  & WiFiInfo.isConnectedOrConnecting())
    {
        //do your task here
    }
else {
     //show an alert dialog or something    
}
于 2016-07-25T10:38:40.910 に答える
0

私がサービスを扱っていたとき、これで問題が解決しました.以前は !info.isConnected() を使用していましたが、それだけでは十分ではありませんでした

 ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();

        if(info==null || !info.isConnected()) {
            stopSelf();
            return;

        }
于 2014-06-28T16:29:32.007 に答える