recorrer que iterador example concepto android android-notifications

android - que - iterator() java



java.lang.NullPointerException: Intenta invocar el método de interfaz ''java.util.Iterator java.lang.Iterable.iterator()'' al iniciar una notificación (1)

Noté que algunos de mis usuarios están recibiendo esta excepción. No sé cómo reproducirlo, solo tengo los informes sobre Crashlytics. Parece estar dentro del código de Google. De los miles que han usado este código, solo 39 han tenido la excepción.

¿Alguna idea de lo que podría estar mal?

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)

Gracias.


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

y

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

Por lo tanto, si hay algún error con la solicitud AIDL, o el perfil del usuario está deshabilitado, tendrá NPE en el código ApplicationPackageManager.java. Creo que es imposible prevenir esta situación, y te aconsejo que envuelvas la creación de notificaciones en el bloque catch try}