2016-06-26 8 views
24

Begann, diesen Fehler in der Produktionsversion meiner App zu erhalten.Intent.migrateExtraStreamToClipData() für einen Nullobjektverweis

Es gibt keine klare Zeile, in der dies tatsächlich auftritt, aber ich habe vor kurzem meine Support-Bibliothek-Version auf 24.0.0 geändert. Hier ist die vollständige 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$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: Ich möchte auch darauf hinweisen, dass 100% der Benutzer diesen Fehler sind auch verwurzelt. Dies tritt auch am 23.4.0 auf ... Ich habe auch einen potentiellen Fehler, der zur gleichen Zeit auftaucht, was mit der Funktion Base64.decode in Bezug auf Firebase zu tun hat.

BEARBEITEN 2: Ich habe etwas Hilfe von einem Android Dev neulich erhalten. Sie schlugen vor, die Google Play Services-Version meines Projekts zu aktualisieren, und es scheint mir bisher geholfen zu haben. Ich werde noch ein paar Tage warten, um die Ergebnisse von meinen Benutzern zu erhalten, aber die ersten Protokolle sind vielversprechend.

Ich war zuvor mit 9.0.2, aber ich bin jetzt auf 9.2.0.

EDIT 3: Aktualisierung auf 9.2.0 half nicht die Abstürze. Ich bekomme immer noch den gleichen Fehler von gerooteten Benutzern. Ich habe festgestellt, dass bei den Nutzern die Abstürze unter Android 6.0 liegen, also werde ich auf einem Live-Gerät testen und so schnell wie möglich aktualisieren.

+2

Das passiert auch auf meinem Emulator. Zuerst erhalte ich ein Popup-Fenster mit den folgenden Angaben: ... setzt auf Google Play-Dienste, die von Ihrem Gerät nicht unterstützt werden. Kontaktieren Sie den Hersteller für Unterstützung. Ich werde versuchen zu debuggen. – Wirling

+0

@Wirling Jetzt, wo Sie es erwähnen, habe ich den Verdacht, dass die Fehlerberichte von den Google Cloud Lab-Geräten und nicht von den Geräten meines Benutzers stammen. Ich habe gerade erst mein Gerät gerootet, um diesen Fehler zu testen, und ich habe es noch nicht gesehen. – c0deblooded

+0

Ich kann dies mithilfe der Google Play Services Vision-Bibliothek (9.2) reproduzieren. Ich überprüfe einfach die Methode "isGooglePlayServicesAvailable", bevor ich die Kamera für die QR-Code-Erkennung starte. Wenn es nicht verfügbar ist, zeige ich den Dialog dann von der 'getErrorDialog' Methode. Es wird dann abstürzen, wenn Sie versuchen, zu aktualisieren. Nur auf gerooteten Geräten. – Brian

Antwort

6

Scheint so, als ob der Fehler auf Geräten auftritt, auf denen Google Play-Dienste nicht installiert sind. Die bestandene Absicht ist dann null.

Sie können sicherstellen, dass die übergebene Absicht nicht null ist, indem Sie die Methode startActivityForResult in Ihrer Aktivität überschreiben.

@Override  
public void startActivityForResult(Intent intent, int requestCode) { 
    if (intent == null) {  
     intent = new Intent();   
    }  
    super.startActivityForResult(intent, requestCode); 
} 
+0

Hmm funktioniert nicht für mich, ich bekomme immer noch den Absturz. – jlively

+0

@jlivelyare können Sie alternativ super in einem Versuch catch Block aufrufen. Auf diese Weise wird die Nullzeiger-Ausnahme ohne Zweifel abgefangen. Die einzige Sache, um sicherzustellen, ist, dass die Aktivität, die startActivityForResult überschreibt, die richtige ist. – MVojtkovszky

+0

Entschuldigung, aber was auf der Erde ist der Punkt, um mit leerer Absicht Aktivität zu beginnen? –

-1

das ist wirklich funktioniert

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

Versuchen Sie, Catch-Blöcke sind langsam. Ein Null-Check wäre für dieses Szenario ausreichend. – Ajeet

3

Diese Frage ist ein bisschen alt, aber ich wollte nur auf ein Update teilen. Laut this Github issue on the GCM project sollte das Problem in der Google Play Services-Version 9.4.0 gelöst werden. Die angenommene Antwort sollte ebenfalls funktionieren (als Zwischen-Patch). Wenn Sie jedoch Ihre Google Play Services-Bibliothek aktualisieren, sollte dieses Problem behoben sein.