J'ai remarqué que certains de mes utilisateurs reçoivent cette exception. Je ne sais pas comment le reproduire, je n'ai que les rapports sur Crashlytics. Semble être profondément dans le code de Google. Sur des milliers de personnes qui ont utilisé ce code, seulement 39 ont eu l'exception.
Une idée de ce qui pourrait être faux?
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)
Merci.
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;
}
et
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;
}
}
Donc, s'il y a un problème avec la demande AIDL, ou si le profil de l'utilisateur est désactivé, vous aurez NPE dans le code ApplicationPackageManager.Java. Je pense qu'il est impossible d'empêcher cette situation, et je vous conseille d'envelopper la création de notification dans try {} catch block