1

Ich benutze querySummary() -Methode von NetworkStatsManager, um die Datennutzung zu berechnen, es gibt mir richtige Verwendung, aber manchmal wirft es NullPointerException für diese Methode.NullPointerException für die querySummary-Methode bei der Berechnung der Datennutzung

Fehler in UsageTestService:

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) 

Mein Code:

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

Was wird das Problem sein?

+1

Mögliches Duplikat [? Was für eine Nullpointer ist, und wie kann ich es beheben] (https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –

+0

@NileshRathod, hier habe ich das Kontrollkästchen if (networkStats! = null) hinzugefügt, dann wird es nur fortgesetzt. –

+0

Wahrscheinlich sind die Daten nicht in allen Geräten verfügbar? – SripadRaj

Antwort

0

Wir stolperten auf das gleiche Problem und es scheint ein Plattformfehler zu sein. Im Moment noch unfixiert in Meisterzweig.

Dies ist ein Auszug aus dem aktuellen plaform Code:

 @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

Beeinflusst dieser Fehler die Leistung Ihrer App? –

+0

Unsere App stürzte zufällig wegen dieses Problems ab, bis wir einen try-catch hinzugefügt haben, um die Ausnahme zu behandeln. Glücklicherweise ist das Sammeln von Netzwerknutzungsdaten kein Hauptmerkmal in unserer App, es ist also kein großes Problem, wenn es manchmal fehlschlägt (solange wir den Absturz vermeiden). Aber natürlich wäre es schön, wenn Google diesen Fehler behoben hätte. – gelupa

Verwandte Themen