首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在计算数据使用率时获取querySummary方法的NullPointerException

在计算数据使用率时获取querySummary方法的NullPointerException
EN

Stack Overflow用户
提问于 2017-08-04 20:37:09
回答 1查看 345关注 0票数 1

我使用NetworkStatsManager的querySummary()方法来计算数据使用量,它给了我正确的用法,但有时它会为这个方法抛出NullPointerException。

UsageTestService中的错误:

代码语言:javascript
运行
复制
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)

我的代码:

代码语言:javascript
运行
复制
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;
                                    }
                                    }
                                    }

问题会是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 13:58:42

我们遇到了同样的问题,这似乎是一个平台错误。目前,仍未固定在主分支中。

这是当前plaform代码的摘录:

代码语言:javascript
运行
复制
        @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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45507043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档