web-dev-qa-db-fra.com

Intent.migrateExtraStreamToClipData () sur une référence d'objet null

J'ai commencé à avoir 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 sur laquelle cela se produit réellement, mais j'ai récemment changé la version de ma bibliothèque de support technique en 24.0.0. Voici le stacktrace complet:

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$1.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 tiens également à noter que 100% des utilisateurs qui obtiennent cette erreur sont également enracinés. Cela se produit également le 23.4.0 ... J'ai aussi une erreur potentielle liée qui est apparue en même temps et qui concerne la fonction Base64.decode par rapport à Firebase.

EDIT 2: J'ai reçu l'aide d'un développeur Android l'autre jour. Ils m'ont suggéré de mettre à jour la version des services Google Play de mon projet et cela semble avoir été utile 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 vers la version 9.2.0 n'a pas aidé les collisions. Je reçois toujours la même erreur d'utilisateurs rootés. J'ai remarqué que, chez les utilisateurs, les pannes sont inférieures à Android 6.0. Je vais donc tester sur un appareil en direct et mettre à jour dès que possible.

30
c0deblooded

On dirait que l'erreur se produit sur les appareils sur lesquels les services Google Play ne sont pas installés. L'intention transmise sera alors nulle.

Vous pouvez vous assurer que l'intention transmise n'est pas nulle en substituant 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);
}
10
MVojtkovszky

Cette question est un peu ancienne, mais je voulais juste partager une mise à jour à ce sujet. Selon ce problème de Github sur le projet GCM , le problème devrait être résolu dans la version 9.4.0 des services Google Play. La réponse acceptée devrait également fonctionner (en tant que correctif intermédiaire), mais si vous mettez à jour votre bibliothèque de services Google Play, ce problème devrait être résolu.

3
Smalls

ça fonctionne vraiment

@Override
public void startActivityForResult(Intent intent, int requestCode) {
    try {
        super.startActivityForResult(intent, requestCode);
    } catch (Exception ignored){}
}
0
user2212515

C’est très probablement le même problème que dans getLaunchIntentForPackage est nul pour certaines applications . Ce n’est pas vraiment un doublon (OP ne pouvant pas tracer la ligne incriminée, connue dans la question liée), problème, la solution liée question pourrait aider.

0
Piotr Śmietana