Intent.migrateExtraStreamToClipData() auf einer Null-Objektreferenz

Lesezeit: 6 Minuten

Benutzeravatar von c0deblooded
c0deblooded

Dieser Fehler wurde in der Produktionsversion meiner App angezeigt.

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

Es gibt keine klare Linie, an der dies tatsächlich auftritt, aber ich habe kürzlich die Version meiner Support-Bibliothek auf 24.0.0 geändert. Hier ist der 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)

BEARBEITEN: Ich möchte auch darauf hinweisen, dass 100 % der Benutzer, die diesen Fehler erhalten, ebenfalls gerootet sind. Dies tritt auch auf 23.4.0 auf … Ich habe auch einen möglichen verwandten Fehler, der gleichzeitig aufgetaucht ist und mit der Base64.decode-Funktion in Bezug auf Firebase zu tun hat.

BEARBEITEN 2: Ich habe neulich Hilfe von einem Android-Entwickler erhalten. Sie schlugen vor, dass ich die Google Play Services-Version meines Projekts aktualisiere, und es scheint bisher geholfen zu haben. Ich werde noch ein paar Tage warten, um die Ergebnisse meiner Benutzer zu erhalten, aber die ersten Protokolle sind vielversprechend.

Ich habe vorher 9.0.2 verwendet, aber ich bin jetzt auf 9.2.0.

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

  • Das passiert auch auf meinem Emulator. Zuerst erhalte ich ein Popup mit der Meldung: … Verlässt sich auf Google Play-Dienste, die von Ihrem Gerät nicht unterstützt werden. Wenden Sie sich an den Hersteller, um Unterstützung zu erhalten. Ich werde versuchen zu debuggen.

    – Wirling

    30. Juni 2016 um 7:11 Uhr

  • @Wirling Jetzt, wo Sie es erwähnen, habe ich den Verdacht, dass die Fehlerberichte von Googles Cloud Test Lab-Geräten und nicht von den Geräten meiner Benutzer stammen. Ich habe mein Gerät erst kürzlich gerootet, um speziell auf diesen Fehler zu testen, und ich habe noch nicht gesehen, dass er auftaucht.

    – c0deblooded

    8. Juli 2016 um 1:17 Uhr

  • Ich kann dies mit der Google Play Services Vision-Bibliothek (9.2) reproduzieren. Ich mache eine einfache Überprüfung, indem ich die verwende isGooglePlayServicesAvailable Methode, bevor Sie die Kamera für die QR-Code-Erkennung starten. Wenn es nicht verfügbar ist, zeige ich dann den Dialog von der getErrorDialog Methode. Es stürzt dann beim Update-Versuch ab. Tritt nur auf gerooteten Geräten auf.

    – Brian

    23. Juli 2016 um 10:54 Uhr

  • Ich habe auch das gleiche Problem, wenn ich versuche, Playstore zu öffnen – Hier ist der Code – Absicht Absicht = neue Absicht (Intent.ACTION_VIEW); intention.setData(Uri.parse(“market://details?id=com.whatsapp”)); startActivity (Absicht);

    – Vamsi

    1. August 2016 um 9:20 Uhr

  • Hallo @c0d3blooded . Ich habe mir dieses Problem angesehen: github.com/google/gcm/issues/209, und sie sagen, dass der Fehler behoben ist. Kannst du (oder irgendjemand) das überprüfen? Ich kann den Fehler nicht reproduzieren. Danke!

    – NonGrate

    31. August 2016 um 11:51 Uhr

Benutzeravatar von MVojtkovszky
MVojtkovszky

Anscheinend tritt der Fehler auf Geräten auf, auf denen Google Play Services nicht installiert sind, die übergebene Absicht ist dann null.

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

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

  • @jlivelyare kannst du alternativ super in einem try catch Block aufrufen. Auf diese Weise wird die Nullzeiger-Ausnahme ohne Zweifel abgefangen. Es muss lediglich sichergestellt werden, dass die Aktivität, die startActivityForResult überschreibt, die richtige ist.

    – MVojtkovszky

    27. Juli 2016 um 8:41 Uhr


  • Entschuldigung, aber was um alles in der Welt bringt es, mit leeren Absichten zu beginnen?

    – Jan Hudec

    10. Mai 2017 um 13:10 Uhr

  • @JanHudec Der ganze Sinn dieser Antwort besteht darin, die Verarbeitung von bestandener Null-Absicht zu vermeiden, was tatsächlich außerhalb Ihrer Kontrolle geschehen kann und den Absturz verursacht (daher die Frage).

    – MVojtkovszky

    10. Mai 2017 um 14:03 Uhr


Das hat bei mir tatsächlich funktioniert.

Für Android 11 (API-Ebene 30) oder höher, in AndroidManifest.xml,

<queries>
        <package android:name="com.google.android.youtube" />
        <package android:name="com.example.app" />
</queries>

„Wenn Ihre App auf Android 11 (API-Ebene 30) oder höher ausgerichtet ist und mit anderen als den automatisch sichtbaren Apps interagieren muss, fügen Sie das Element in der Manifestdatei Ihrer App hinzu. Geben Sie innerhalb des Elements die anderen Apps nach Paketnamen an. “

Verweisen Hier für mehr Details.

  • Das ist die Antwort.

    – Mike Pandolfini

    21. Dezember 2022 um 16:07 Uhr

Diese Frage ist ein bisschen alt, aber ich wollte nur ein Update dazu teilen. Entsprechend dieses Github-Problem zum GCM-Projekt Das Problem sollte in der Google Play Services-Version behoben sein 9.4.0. Die akzeptierte Antwort sollte ebenfalls funktionieren (als Zwischenpatch), aber wenn Sie Ihre Google Play Services-Bibliothek aktualisieren, sollte dieses Problem behoben sein.

Benutzeravatar von Tarif Chakder
Tarif Chakder

Sie können die App direkt mit öffnen getLaunchIntentForPackage und legen Sie Ihr App-Paket fest

val intentApp = requireActivity().packageManager.getLaunchIntentForPackage("com.twitter.android")
        try {
            this.startActivity(intentApp)
        } catch (ex: ActivityNotFoundException) {
            Toast.makeText(this,getString(R.string.activity_no_app), Toast.LENGTH_LONG).show()
        }

Aber Android 11 (API-Level 30) funktioniert aus Sicherheitsgründen nicht, um diese Lösung zu überwinden, müssen Sie das App-Paket angeben AndroidManifes.xml

<queries>
        <package android:name="com.google.android.youtube" />
        <package android:name="com.example.app" />
</queries>

das funktioniert wirklich

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

  • Try-Catch-Blöcke sind langsam. Für dieses Szenario würde eine Nullprüfung ausreichen.

    – Ajeet

    19. Oktober 2016 um 5:53 Uhr


Benutzeravatar von Piotr Śmietana
Piotr Śmietana

Höchstwahrscheinlich ist es das gleiche Problem wie bei getLaunchIntentForPackage, das für einige Apps null ist. Nicht wirklich ein Duplikat (da OP die problematische Zeile nicht verfolgen konnte, die in der verknüpften Frage bekannt ist), aber wenn jemand mit diesem Problem konfrontiert ist, kann die Lösung der verknüpften Frage hilfreich sein.

  • Try-Catch-Blöcke sind langsam. Für dieses Szenario würde eine Nullprüfung ausreichen.

    – Ajeet

    19. Oktober 2016 um 5:53 Uhr


Benutzeravatar von dmukherjee
dmukherjee

Der folgende Code funktionierte für Android 11 (API-Level 30) oder höher:

In AndroidManifest.xml,

<queries>
        <package android:name="com.google.android.youtube" />
        <package android:name="com.example.app" />
</queries>

„Wenn Ihre App auf Android 11 (API-Ebene 30) oder höher ausgerichtet ist und mit anderen als den automatisch sichtbaren Apps interagieren muss, fügen Sie das Element in der Manifestdatei Ihrer App hinzu. Geben Sie innerhalb des Elements die anderen Apps nach Paketnamen an. “

Verweisen Hier für mehr Details.

1442960cookie-checkIntent.migrateExtraStreamToClipData() auf einer Null-Objektreferenz

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy