Leider hat MyApp aufgehört. Wie kann ich das lösen?

Apr 29 2014

Ich entwickle eine Anwendung und jedes Mal, wenn ich sie ausführe, erhalte ich die folgende Meldung:

Leider hat MyApp aufgehört.

Was kann ich tun, um das zu lösen?


Zu dieser Frage - offensichtlich inspiriert von Was ist ein Stack-Trace und wie kann ich damit meine Anwendungsfehler debuggen? Es gibt viele Fragen, die besagen, dass ihre Anwendung ohne weitere Details abgestürzt ist. Diese Frage soll unerfahrene Android-Programmierer darin unterweisen, wie sie versuchen können, ihre Probleme selbst zu beheben oder die richtigen Fragen zu stellen.

Antworten

734 nhaarman Apr 29 2014 at 06:55

Diese Antwort beschreibt den Vorgang des Abrufens der Stapelverfolgung. Haben Sie bereits die Stapelverfolgung? Informationen zu Stack-Traces finden Sie unter " Was ist ein Stack-Trace und wie kann ich damit meine Anwendungsfehler debuggen? "

Das Problem

Ihre Bewerbung wurde beendet, weil ein Ungefangener RuntimeExceptiongeworfen wurde.
Die häufigste davon ist die NullPointerException.

Wie man es löst?

Jedes Mal, wenn eine Android-Anwendung abstürzt (oder eine Java-Anwendung), Stack tracewird a in die Konsole geschrieben (in diesem Fall logcat). Diese Stapelverfolgung enthält wichtige Informationen zur Lösung Ihres Problems.

Android Studio

Klicken Sie in der unteren Leiste des Fensters auf die LogcatSchaltfläche. Alternativ können Sie alt+ drücken 6. Stellen Sie sicher, dass Ihr Emulator oder Gerät im DevicesBedienfeld ausgewählt ist. Versuchen Sie als Nächstes, die Stapelverfolgung zu finden, die rot angezeigt wird. Möglicherweise sind viele Dinge in logcat angemeldet, daher müssen Sie möglicherweise ein wenig scrollen. Eine einfache Möglichkeit, den Stack-Trace zu finden, besteht darin, den Logcat zu löschen (mithilfe des Papierkorbs auf der rechten Seite) und die App erneut abstürzen zu lassen.

Ich habe die Stapelverfolgung gefunden, was nun?

Yay! Sie sind auf halbem Weg zur Lösung Ihres Problems.
Sie müssen nur herausfinden, was genau Ihre Anwendung zum Absturz gebracht hat, indem Sie den Stack-Trace analysieren.

Informationen zu Stack-Traces finden Sie unter " Was ist ein Stack-Trace und wie kann ich damit meine Anwendungsfehler debuggen? "

Ich kann mein Problem immer noch nicht lösen!

Wenn Sie Ihre Exceptionund die Zeile gefunden haben, in der sie aufgetreten ist, und immer noch nicht herausfinden können, wie sie behoben werden können, zögern Sie nicht, eine Frage zu StackOverflow zu stellen.

Versuchen Sie, so präzise wie möglich zu sein: Veröffentlichen Sie den Stack-Trace und den entsprechenden Code (z. B. ein paar Zeilen bis zu der Zeile, die den geworfen hat Exception).

121 VladBezden Mar 23 2015 at 06:06

Sie können das ADB-Tool von Google verwenden , um Logcat filedas Problem zu analysieren.

adb logcat > logcat.txt

Öffnen Sie die logcat.txtDatei und suchen Sie nach Ihrem Anwendungsnamen. Es sollte Informationen darüber geben, warum es fehlgeschlagen ist, die Zeilennummer, den Klassennamen usw.

38 HirenVaghela Mar 18 2015 at 15:01

Zuerst überprüfen Sie, an welchem ​​Punkt Ihre App abgestürzt ist ( Unfortunately, MyApp has stopped.). Hierfür können Sie Log.e("TAG", "Message");über diese Zeile Ihr App-Log in Logcat sehen.

Danach finden Sie heraus, welcher Punkt Ihre App gestoppt hat. Es ist sehr einfach, ihn an Ihrer Seite zu lösen.

29 RahilAli Jun 11 2015 at 17:58

Überprüfen Sie einfach den Fehler in log cat.

Sie erhalten die Option log cat von in Eclipse:

Fenster-> Ansicht anzeigen-> Andere-> Android-> Logcat

Protokollkatze enthält Fehler.

Andernfalls können Sie den Fehler auch überprüfen, indem Sie eine Anwendung im Debug-Modus ausführen. Setzen Sie danach zunächst den Haltepunkt, indem Sie Folgendes tun:

Klicken Sie mit der rechten Maustaste auf Projekt-> Debuggen als-> Android-Anwendung

28 AliBdeir Nov 06 2016 at 16:23

Hinweis: Diese Antwort verwendet Android Studio 2.2.2

Hinweis 2: Ich gehe davon aus, dass Ihr Gerät erfolgreich verbunden wurde.


Das erste, was Sie tun, wenn Ihre Anwendung abstürzt, ist ein Blick in die LogCat. Am Ende von Android Studio befindet sich eine Symbolleiste mit einer Liste von Menüs:

Klicken Sie auf den "Android Monitor" (den, den ich im obigen Bild unterstrichen habe. ^)

Jetzt erhalten Sie ungefähr Folgendes:

Ändern Sie " Verbose" in " Error". Jetzt werden nur noch protokollierte Fehler angezeigt. Mach dir jetzt keine Sorgen über all diese Fehler (wenn du sie hast).

OK. Tun Sie jetzt, was Sie getan haben, um Ihre App zum Absturz zu bringen. Wechseln Sie nach dem Absturz Ihrer App zu Ihrem Logcat. Sie sollten ein neues Absturzprotokoll finden, das viele enthält at:x.x.x: und Caused by: TrumpIsPresidentExceptionzum Beispiel. Gehen Sie zu dieser Caused by:Anweisung in Ihrem Logcat.

Neben , dass Caused By:, sollte es die Ausnahme sein, was geschehen. In meinem Fall ist es ein RuntimeExceptionund darunter sollte eine Zeile stehen, die einen blauen Link enthält , wie zum Beispiel:

Wenn dasCaused by: KEINE Zeile mit einem blauen Text irgendwo darunter hat, suchen Sie nach einer anderen Caused by:, die dies tut.

Klicken Sie auf diesen blauen Link . Es sollte Sie dorthin bringen, wo das Problem aufgetreten ist. In meinem Fall lag es an dieser Zeile:

throw new RuntimeException();

Jetzt weiß ich also, warum es abstürzt. Es ist, weil ich die Ausnahme selbst werfe. Dies war ein offensichtlicher Fehler .


Nehmen wir jedoch an, ich habe einen weiteren Fehler erhalten:

java.lang.NullPointerException

Ich habe meinen Logcat überprüft, auf den blauen Link geklickt, den er mir gegeben hat, und er hat mich hierher geführt:

mTextView.setText(myString);

Also, jetzt möchte ich debuggen. Gemäß dieser StackOverflow-Frage sagt eine NullPointerException, dass etwas ist null.

Lassen Sie uns also herausfinden, was null ist . Es gibt zwei Möglichkeiten. Entweder mTextViewist null oder myStringist null. Um herauszufinden, mTextView.setText(mString)füge ich vor der Zeile diese beiden Zeilen hinzu:

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

Jetzt, wie zuvor (wir haben Verose in Error geändert), möchten wir "Error" in "Debug" ändern. Da wir uns durch Debuggen anmelden. Hier sind alle Protokollmethoden:

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

Da wir verwendet haben Log.d, checken wir Debug ein. Deshalb haben wir es in Debug geändert.

Hinweis Log.dhat einen ersten Parameter, in unserem Fall "AppDebug". Klicken Sie oben rechts im Logcat auf das Dropdown-Menü "Keine Filter". Wählen Sie "Filterkonfiguration bearbeiten", geben Sie Ihrem Filter einen Namen und geben Sie in "Log Tag" "App Debug" ein. OK klicken". Jetzt sollten im Logcat zwei Zeilen angezeigt werden:

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

Jetzt wissen wir also, dass mTextView null ist.

Ich beobachte meinen Code, jetzt merke ich etwas.

Ich habe mich private TextView mTextViewan der Spitze meiner Klasse erklärt. Aber ich definiere es nicht.

Grundsätzlich habe ich vergessen, dies in meinem onCreate () zu tun:

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

Deshalb mTextViewist das null, weil ich vergessen habe, meiner App zu sagen, was es ist. Also füge ich diese Zeile hinzu, führe meine App aus und jetzt stürzt die App nicht ab.


20 Ani Jul 04 2017 at 11:38

Dieses Popup wird nur angezeigt, wenn in Ihrem Code eine schwerwiegende Ausnahme auftritt, die die Ausführung der App stoppt. Es könnte jede Ausnahme sein NullPointerException, OutOfMemoryExceptionetc.

Am besten überprüfen Sie über Logcat, ob Sie die App noch in Android Studio entwickeln. Auf diese Weise können Sie schnell die Stapelverfolgung lesen und die Ursache der App überprüfen.

Wenn Ihre App bereits aktiv ist, können Sie logcat nicht verwenden . Zu diesem Zweck können CrashlyticsSie Fehlerberichte für alle auftretenden Ausnahmen implementieren .

18 Manojahirwar Jun 29 2015 at 18:48

Überprüfen Sie Ihre LogcatNachricht und sehen Sie Ihre ManifestDatei. Es sollte etwas fehlen, wie das Definieren der Activity,Benutzerberechtigung usw.

15 ShivBuyya Nov 03 2015 at 12:47

Sie können eines dieser Tools verwenden:

  1. adb logcat

  2. adb logcat> logs.txt (Sie können Editoren verwenden, um Fehler zu öffnen und zu suchen.)

  3. eclipse logcat (Wenn in eclipse nicht sichtbar, gehen Sie zu Windows-> Ansicht anzeigen-> Andere-> Android-> LogCat)

  4. Android Debug Monitor oder Android Device Monitor (Befehlsmonitor eingeben oder über die Benutzeroberfläche öffnen)

  1. Android Studio

Ich schlage vor, Android Debug Monitor zu verwenden , es ist gut. Weil Eclipse hängt, wenn zu viele Protokolle vorhanden sind, und durch den ADB-Logcat-Filter und alles schwierig.

13 alirezaamini Jul 13 2015 at 15:37

Sie müssen das überprüfen Stack trace

Wie geht das?

auf Ihrer IDE Überprüfen Sie die Fenster von LOGCAT

Wenn Sie die Logcat-Fenster nicht sehen können, gehen Sie zu diesem Pfad und öffnen Sie ihn

window->show view->others->Android->Logcat

Wenn Sie Google-Api verwenden, gehen Sie zu diesem Pfad

adb logcat> logcat.txt

12 MayankNema Apr 03 2017 at 16:37

In der folgenden showToast () -Methode müssen Sie einen anderen Parameter für den Kontext oder den Anwendungskontext übergeben, indem Sie dies versuchen.

  public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}
11 W0rmH0le Jul 14 2016 at 10:21

Lassen Sie mich eine grundlegende Logcat-Analyse für den Fall teilen, dass Sie einen Force Close treffen (wenn die App nicht mehr funktioniert).

DOCS

Das grundlegende Tool von Android zum Sammeln / Analysieren von Protokollen ist der Logcat.

HIER ist die Android-Seite über Logcat

Wenn Sie Android Studio verwenden, können Sie diesen LINK auch überprüfen .

Erfassen

Grundsätzlich können Sie logcat mit dem folgenden Befehl MANUELL erfassen (oder einfach das AndroidMonitor-Fenster in AndroidStudio überprüfen):

adb logcat

Es gibt viele Parameter, die Sie dem Befehl hinzufügen können, mit denen Sie die gewünschte Nachricht filtern und anzeigen können ... Dies ist persönlich ... Ich verwende immer den folgenden Befehl, um den Zeitstempel der Nachricht abzurufen:

adb logcat -v time

Sie können die Ausgabe in eine Datei umleiten und in einem Texteditor analysieren.

Analysieren

Wenn Ihre App abstürzt, erhalten Sie Folgendes:

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

Dieser Teil des Protokolls zeigt Ihnen viele Informationen:

  • Als das Problem auftrat: 07-09 08:29:13.475

Es ist wichtig zu überprüfen, wann das Problem aufgetreten ist ... Möglicherweise finden Sie mehrere Fehler in einem Protokoll ... Sie müssen sicher sein, dass Sie die richtigen Meldungen überprüfen :)

  • Welche App ist abgestürzt: com.example.khan.abc

Auf diese Weise wissen Sie, welche App abgestürzt ist (um sicherzugehen, dass Sie die Protokolle Ihrer Nachricht überprüfen).

  • Welcher FEHLER: java.lang.NullPointerException

Ein NULL-Zeiger-Ausnahmefehler

  • Detaillierte Informationen zum Fehler: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

Sie haben versucht, die Methode onBackPressed()von einem FragmentActivityObjekt aus aufzurufen . Dieses Objekt war jedoch, nullals Sie es getan haben.

  • Stapelverfolgung: Die Stapelverfolgung zeigt Ihnen die Reihenfolge des Methodenaufrufs an ... Manchmal tritt der Fehler in der aufrufenden Methode (und nicht in der aufgerufenen Methode) auf.

    at com.example.khan.abc.AudioFragment $ 1.onClick (AudioFragment.java:125)

Fehler in Datei com.example.khan.abc.AudioFragment.java, innerhalb der onClick()Methode in Zeile: 125(Stacktrace zeigt die Zeile, in der der Fehler aufgetreten ist)

Es wurde aufgerufen von:

at android.view.View.performClick(View.java:4848)

Welches wurde aufgerufen von:

at android.view.View$PerformClick.run(View.java:20262)

welches aufgerufen wurde von:

at android.os.Handler.handleCallback(Handler.java:815)

etc....

Überblick

Dies war nur eine Übersicht ... Nicht alle Protokolle sind einfach, aber der Fehler gibt ein spezifisches Problem und ausführlich zeigt alle Probleme ... Es dient nur dazu, die Idee zu teilen und Ihnen Informationen für Einsteiger bereitzustellen ...

Ich hoffe ich konnte dir irgendwie helfen ... Grüße

9 BiswajitKarmakar May 15 2016 at 14:45

Verwenden Sie die LogCat und versuchen Sie herauszufinden, was den Absturz der App verursacht.

Um zu sehen , Logcat wenn Sie verwenden Android Studio dann Drücken Sie ALT + 6 oder

Wenn Sie Eclipse verwenden, dann Fenster -> Perspektive öffnen -> Andere - LogCat

Gehen Sie zu LogCat und wählen Sie im Dropdown-Menü einen Fehler aus. Diese enthält alle erforderlichen Informationen zum Debuggen. Wenn dies nicht hilft, senden Sie die LogCat als Bearbeitung an Ihre Frage, und jemand wird Ihnen helfen.

8 felislynx.silae Oct 02 2017 at 22:07

Wenn Ihre App aus irgendeinem Grund ohne gute Stapelverfolgung abstürzt. Versuchen Sie, es in der ersten Zeile zu debuggen, und gehen Sie Zeile für Zeile bis zum Absturz. Dann haben Sie eine Antwort, welche Leitung Ihnen Probleme bereitet. Wahrscheinlich könnten Sie es dann in try catch block und print error output einbinden.

6 Pelpotronic Mar 22 2015 at 15:50

Sie können diese Fehlermeldung auch einzeln erhalten, ohne Stapelverfolgung oder weitere Fehlermeldung.

In diesem Fall müssen Sie sicherstellen, dass Ihr Android-Manifest korrekt konfiguriert ist (einschließlich des Zusammenführens von Manifesten aus einer Bibliothek und aller Aktivitäten, die aus einer Bibliothek stammen würden), und besonders auf die erste Aktivität achten, die in Ihrer Anwendung in Ihren Manifestdateien angezeigt wird .

6 naXa Sep 11 2018 at 15:35

Absturz während der Entwicklung

Probieren Sie meine Lieblingswerkzeug- Protokollansicht aus , um die Protokolle abzurufen und während der Entwicklung zu analysieren.
Achten Sie darauf , zu kennzeichnen ./logviewund ./lib/logview.jarals ausführbar , wenn unter Linux läuft.

Wenn es Ihnen nicht gefällt, gibt es viele alternative Desktop-Protokoll-Viewer für Android .

Absturz in freier Wildbahn

Integrieren Sie ein Echtzeit-Crash-Reporting-Tool wie Firebase Crashlytics , um Stapelspuren nicht behandelter Ausnahmen abzurufen, die auf den Geräten der Benutzer aufgetreten sind.

Lesen Sie, wie Sie eine Buggy-App veröffentlichen (und leben, um die Geschichte zu erzählen) , um mehr über den Umgang mit Fehlern vor Ort zu erfahren.

5 KopiBryant May 20 2018 at 00:24

Die Leute machen Fehler und damit auch das Codieren.

Wenn jemals etwas errorpassiert ist, wenden Sie sich immer an den Logcat mit dem Text in roter Farbe. Sie können jedoch das eigentliche Problem in blauem Text mit Unterstreichung in diesem roten Text herausfinden .

Stellen Sie sicher, wenn Sie eine neue erstellen activity, deklarieren Sie immer die activityin der AndroidManifestDatei.

Wenn Sie eine Berechtigung hinzufügen, deklarieren Sie diese ebenfalls in der AndroidMainifestDatei.

5 Ashish Mar 26 2019 at 11:42

Logcat - Zum Überprüfen der Protokolle in der Entwicklungsphase von Android Studio

Löschen Sie zunächst den Logcat und lassen Sie die App erneut abstürzen, damit Sie nur abgestürzte Protokolldetails erhalten. Sie müssen den Stack-Trace überprüfen

Leider hat MyApp aufgehört. Dafür gibt es viele Gründe. Sie können dies auch in Protokollen überprüfen. Hierfür können Sie Log.e ("TAG", "Message") verwenden;

Häufiger Fehler beim Absturz der App wie:

  1. Codierungsfehler (falsche Verwendung von Schlüsselwörtern).
  2. Name der Eigenschaft stimmt nicht überein.
  3. Nicht unterstütztes Plugin (vielleicht).
  4. Nicht übereinstimmende Version (vielleicht).
  5. Aktivität fehlt in AndroidManifest-Datei.
  6. Berechtigung fehlt in AndroidManifest-Datei.
  7. Häufigste NullPointerException.
  8. Deklariert, aber nicht definiert.

So beheben Sie einen App-Absturzfehler:

  • Beachten Sie die obigen Punkte und gehen Sie sie durch.
  • Mit dem Fehler erhalten Sie den Dateinamen auch in blauer Farbe (klicken Sie darauf und springen Sie zum Code, wenn ein Fehler auftritt).
4 MehulSolanki May 22 2019 at 17:40

Zuerst müssen Sie überprüfen, wo und warum Ihre App abgestürzt ist. (Unfortunately, MyApp has stopped.).Mithilfe von LOGkönnen Sie herausfinden, was schief gelaufen ist.

Danach finden Sie heraus, an welchem ​​Punkt Ihre App aufgehört hat, dies von Ihrem Punkt aus zu beheben.

4 zapotec Jun 12 2019 at 20:07

Wenn Sie in Ihrem Terminal kein interessantes Protokoll haben (oder diese nicht direkt mit Ihrer App zusammenhängen), liegt Ihr Problem möglicherweise an einer nativen Bibliothek. In diesem Fall sollten Sie in Ihrem Terminal nach "Tombstone" -Dateien suchen.

Der Standardspeicherort für die Tombstone-Dateien hängt von jedem Gerät ab. Wenn dies jedoch der Fall ist, wird in einem Protokoll Folgendes angegeben: Tombstone written to: /data/tombstones/tombstone_06

Weitere Informationen finden Sie unter https://source.android.com/devices/tech/debug .

2 MohsenEmami Mar 16 2020 at 17:18

Auch das Ausführen dieses Befehls im Terminal kann helfen, das Problem zu finden:

gradlew build > log.txt 2>details.txt

Dann sollten Sie zum Speicherort der gradlew-Datei gehen und zwei der oben genannten Protokolldateien lesen.