1

NetworkStatsManagerのquerySummary()メソッドを使用してデータ使用量を計算していますが、これは適切な使い方ですが、NullPointerExceptionをスローします。 UsageTestServiceでデータ使用量の計算中にquerySummaryメソッドのNullPointerExceptionを取得する

エラー:

java.lang.NullPointerException: 
at android.os.Parcel.readException (Parcel.java:1626) 
at android.os.Parcel.readException (Parcel.java:1573) 
at android.net.INetworkStatsSession$Stub$Proxy.getSummaryForAllUid 
(INetworkStatsSession.java:355) 
at android.app.usage.NetworkStats.startSummaryEnumeration 
(NetworkStats.java:330) 
at android.app.usage.NetworkStatsManager.querySummary 
(NetworkStatsManager.java:166) 
at com.test.services.UsageTestService$1.run (UsageTestService.java:172) 

マイコード:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
          NetworkStats networkStats = null; 
          try { 

           networkStatsManager = (NetworkStatsManager) getApplicationContext().getSystemService(Context.NETWORK_STATS_SERVICE); 
           networkStats = networkStatsManager.querySummary(0, getSubscriberId(UsageTestService.this, ConnectivityManager.TYPE_MOBILE), 0, System.currentTimeMillis()); 

          } catch (RemoteException e) { 

           e.printStackTrace(); 
          } 

          if(networkStats!=null) 
          { 

           while (networkStats.hasNextBucket()) { 

            NetworkStats.Bucket bucket = new NetworkStats.Bucket(); 
            networkStats.getNextBucket(bucket); 

            int uid = bucket.getUid(); 
            double rx1 = bucket.getRxBytes(); 
            double tx1 = bucket.getTxBytes(); 
            int state1 = bucket.getState(); 
            double totalRxTx1 = rx1+ tx1; 
            } 
            } 
            } 

問題でしょうか?

+1

可能な複製(https://stackoverflow.com/question/218384/what-is-a-nullpointレシーブ・アンド・ハウ・ド・フィックス・イット) –

+0

@NileshRathod、ここで、(networkStats!= null)の場合にチェックを追加しました。 –

+0

おそらくデータがすべてのデバイスで利用できるわけではありませんか? – SripadRaj

答えて

0

私たちは同じ問題に遭遇し、プラットフォームのバグのようです。現時点では、まだマスターブランチに固定されていません。

これは、現在のplaformコードからの抜粋です:[?何NullPointerExceptionがある、と私はそれをどのように修正すればよい]の

 @Override 
     public NetworkStats getSummaryForAllUid(
       NetworkTemplate template, long start, long end, boolean includeTags) { 
      try { 
       @NetworkStatsAccess.Level int accessLevel = checkAccessLevel(mCallingPackage); 
       final NetworkStats stats = 
         getUidComplete().getSummary(template, start, end, accessLevel); 
       if (includeTags) { 
        final NetworkStats tagStats = getUidTagComplete() 
          .getSummary(template, start, end, accessLevel); 
        stats.combineAllValues(tagStats); 
       } 
       return stats; 
      } catch (NullPointerException e) { 
       // TODO: Track down and fix the cause of this crash and remove this catch block. 
       Slog.wtf(TAG, "NullPointerException in getSummaryForAllUid", e); 
       throw e; 
      } 
     } 

https://github.com/android/platform_frameworks_base/blob/master/services/core/java/com/android/server/net/NetworkStatsService.java#L572

+0

このエラーはアプリのパフォーマンスに影響しますか? –

+0

例外を処理するためのtry-catchを追加するまでは、この問題のためにアプリケーションがランダムにクラッシュしていました。幸いなことに、ネットワークの使用状況データを収集することはアプリの主な機能ではないため、(クラッシュを避ける限り)時には失敗すると大きな問題ではありません。もちろん、Googleがこのエラーを修正したのはいいことです。 – gelupa

関連する問題