java.lang.NullPointerException:尝试在启动通知时调用接口方法'java.util.Iterator java.lang.Iterable.iterator()'



我注意到我的一些用户遇到了这个异常。我不知道如何重现它,我只有关于 Crashlytics 的报告。似乎深入谷歌的代码。在数千名使用此代码的人中,只有 39 人有例外。

知道可能出了什么问题吗?

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.lang.Iterable.iterator()' on a null object reference
       at android.app.ApplicationPackageManager.getUserIfProfile(ApplicationPackageManager.java:2141)
       at android.app.ApplicationPackageManager.getUserBadgeForDensity(ApplicationPackageManager.java:997)
       at android.app.Notification$Builder.getProfileBadgeDrawable(Notification.java:2877)
       at android.app.Notification$Builder.hasThreeLines(Notification.java:3092)
       at android.app.Notification$Builder.build(Notification.java:3646)
       at android.support.v4.app.NotificationCompatApi21$Builder.build(NotificationCompatApi21.java:136)
       at android.support.v7.app.NotificationCompat$LollipopExtender.build(NotificationCompat.java:504)
       at android.support.v4.app.NotificationCompat$NotificationCompatImplApi21.build(NotificationCompat.java:835)
       at android.support.v4.app.NotificationCompat$Builder.build(NotificationCompat.java:1752)
       at mycode.startNotification(mycode.java:361)

谢谢。

ApplicationPackageManager.java
private UserInfo getUserIfProfile(int userHandle) {
    List<UserInfo> userProfiles = getUserManager().getProfiles(UserHandle.myUserId());
    for (UserInfo user : userProfiles) {
        if (user.id == userHandle) {
            return user;
        }
    }
    return null;
}

public List<UserInfo> getProfiles(int userHandle) {
    try {
        return mService.getProfiles(userHandle, false /* enabledOnly */);
    } catch (RemoteException re) {
        Log.w(TAG, "Could not get user list", re);
        return null;
    }
}

因此,如果 AIDL 请求出现问题,或者用户的配置文件被禁用,您将在 ApplicationPackageManager 中.java代码中使用 NPE。我认为这种情况是不可能防止的,我建议你将通知创建包装在try{}catch块中

相关内容

最新更新