Intention.migrateExtraStreamToClipData() sur une référence d'objet nul

commencé à obtenir cette erreur dans la version de production de mon application.

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference

il n'y a pas de ligne claire à laquelle cela se produit réellement mais j'ai récemment changé ma version de bibliothèque de soutien en 24.0.0. Voici la pleine stacktrace:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference
   at android.app.Instrumentation.execStartActivity(Instrumentation.java:1494)
   at android.app.Activity.startActivityForResult(Activity.java:3745)
   at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
   at android.app.Activity.startActivityForResult(Activity.java:3706)
   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871)
   at com.google.android.gms.common.internal.zzi.zztD(Unknown Source)
   at com.google.android.gms.common.internal.zzi.onClick(Unknown Source)
   at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5254)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

EDIT: je veux aussi noter que 100% des utilisateurs qui ont cette erreur sont aussi enracinés. Cela se produit également le 23.4.0... J'ai également une erreur potentielle liée qui a surgi en même temps qui a à voir avec le Base64.décoder la fonction par rapport à Firebase.

EDIT 2: j'ai reçu de l'aide d'un Dev Androïde l'autre jour. Ils ont suggéré que je mette à jour la version de mon projet Google Play Services et il semble avoir aidé jusqu'à présent. Je vais attendre quelques jours de plus pour obtenir les résultats de mes utilisateurs, mais les premiers journaux sont prometteurs.

j'utilisais auparavant 9.0.2 mais je suis maintenant sur 9.2.0.

EDIT 3: la mise à jour à 9.2.0 n'a pas aidé les accidents. J'obtiens toujours la même erreur des utilisateurs enracinés. J'ai noté que chez les utilisateurs obtenir des accidents sont en dessous D'Android 6.0 donc je vais tester sur un appareil en direct et mettre à jour dès que possible.

29
demandé sur c0deblooded 2016-06-26 20:31:49

3 réponses

semble comme l'erreur se produit sur les appareils où les services Google Play ne sont pas installés, l'intention passée sera alors null.

Vous pouvez vous assurer que l'intention passée n'est pas nulle en remplaçant la méthode startActivityForResult dans votre activité.

@Override    
public void startActivityForResult(Intent intent, int requestCode) {
    if (intent == null) {    
        intent = new Intent();        
    }       
    super.startActivityForResult(intent, requestCode);
}
9
répondu MVojtkovszky 2016-10-05 14:48:38

Cette question est un peu vieux, mais je voulais juste partager une mise à jour. Selon le problème doit être résolu dans la version de Google Play Services 9.4.0. La réponse acceptée devrait fonctionner aussi bien (comme un correctif intermédiaire), mais si vous mettez à jour votre bibliothèque de services Google Play, ce problème devrait être résolu.

3
répondu Smalls 2017-09-11 22:13:57

c'est vraiment fonctionne

@Override
public void startActivityForResult(Intent intent, int requestCode) {
    try {
        super.startActivityForResult(intent, requestCode);
    } catch (Exception ignored){}
}
0
répondu user2212515 2016-10-05 14:46:47