it-swarm.com.de

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

Ich entwickle eine Anwendung und bekomme jedes Mal die Nachricht:

Leider hat MyApp aufgehört.

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


Über diese Frage - offensichtlich inspiriert von Was ist ein Stack-Trace und wie kann ich ihn zum Debuggen meiner Anwendungsfehler verwenden? , es gibt viele Fragen, aus denen hervorgeht, dass dies der Fall ist Anwendung ist ohne weitere Details abgestürzt. Diese Frage soll Anfänger Android Programmierer anweisen, wie sie versuchen, ihre Probleme selbst zu beheben, oder die richtigen Fragen stellen.

746
nhaarman

In dieser Antwort wird der Vorgang zum Abrufen des Stack-Trace beschrieben. Haben Sie bereits den Stack-Trace? Informationen zu Stack-Traces finden Sie unter " Was ist ein Stack-Trace und wie kann ich ihn zum Debuggen meiner Anwendungsfehler verwenden? "

Das Problem

Ihre Anwendung wurde beendet, weil ein nicht abgefangenes RuntimeException ausgelöst wurde.
Am häufigsten ist das NullPointerException .

Wie man es löst?

Jedes Mal, wenn eine Anwendung Android abstürzt (oder eine andere Anwendung Java), wird ein Stack trace in die Konsole geschrieben (in diesem Fall logcat). Dieser Stack-Trace enthält wichtige Informationen zur Lösung Ihres Problems.

Android Studio

Finding the stack trace in Android Studio

Klicken Sie in der unteren Leiste des Fensters auf die Schaltfläche Logcat. Alternativ können Sie drücken alt+6. Stellen Sie sicher, dass Ihr Emulator oder Gerät in der Anzeige Devices ausgewählt ist. Versuchen Sie als Nächstes, den Stapel-Trace zu finden, der in 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, das Protokoll zu löschen (über den Papierkorb auf der rechten Seite) und die App erneut abstürzen zu lassen.

Ich habe den Stack-Trace gefunden, was nun?

Yay! Sie sind auf halbem Weg, Ihr Problem zu lösen.
Sie müssen nur herausfinden, warum Ihre Anwendung genau abgestürzt ist, indem Sie den Stack-Trace analysieren.

Lesen Sie die Stack-Traces unter " Was ist ein Stack-Trace und wie kann ich ihn zum Debuggen meiner Anwendungsfehler verwenden? ".

Ich kann mein Problem immer noch nicht lösen!

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

Versuchen Sie, so kurz wie möglich zu sein: Veröffentlichen Sie den Stack-Trace und den relevanten Code (z. B. ein paar Zeilen bis zu der Zeile, die die Variable Exception ausgelöst hat).

686
nhaarman

Sie können Googles ADB-Tool verwenden, um Logcat file zu erhalten, um das Problem zu analysieren.

adb logcat > logcat.txt

öffnen Sie die Datei logcat.txt und suchen Sie nach dem Namen Ihrer Anwendung. Es sollte Informationen darüber geben, warum es fehlgeschlagen ist, die Zeilennummer, den Klassennamen usw.

106
Vlad Bezden

Zuerst überprüfen Sie, an welcher Stelle Ihre App abgestürzt ist (Unfortunately, MyApp has stopped.). Hierfür können Sie Log.e("TAG", "Message"); verwenden. In dieser Zeile können Sie Ihr App-Protokoll in logcat anzeigen.

Danach finden Sie heraus, an welcher Stelle Ihre App angehalten hat. Es ist sehr einfach, sie an Ihrer Seite zu lösen.

35
Hiren Vaghela

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

Die Option log cat erhalten Sie in Eclipse:

fenster-> Ansicht anzeigen-> Andere-> Android-> Logcat

Logkatze 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:

rechtsklick auf Projekt-> Debuggen als-> Android-Anwendung

26
Rahil Ali

Hinweis: Diese Antwort verwendet Android Studio 2.2.2

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


Wenn Ihre Anwendung abstürzt, sehen Sie zuerst in LogCat nach. Unten in Android Studio befindet sich eine Symbolleiste mit einer Liste von Menüs:

image

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

Jetzt erhalten Sie ungefähr Folgendes:

image

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

image

Okay. 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 zum Beispiel viele at:x.x.x: und Caused by: TrumpIsPresidentException enthält. Wechseln Sie zu dieser Caused by: -Anweisung in Ihrem Logcat.

image

Neben diesem Caused By: sollte die Ausnahme stehen, die aufgetreten ist. In meinem Fall ist es ein RuntimeException und darunter sollte sich eine Zeile befinden, die ein Blau enthält Link wie:

image

Wenn dieses Caused by: keine Zeile mit einem blauen Text darunter hat, suchen Sie nach einem anderen Caused by:, der dies tut .

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

throw new RuntimeException();

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


Nehmen wir jedoch an, ich hätte einen anderen Fehler:

Java.lang.NullPointerException

Ich überprüfte meinen Logcat, klickte auf den blauen Link, den er mir gab, und brachte mich hierher:

mTextView.setText(myString);

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

Finden wir also heraus , was null ist . Es gibt zwei Möglichkeiten. Entweder ist mTextView null, oder myString ist null. Um dies herauszufinden, füge ich vor der Zeile mTextView.setText(mString) die folgenden zwei Zeilen hinzu:

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

Nun möchten wir, wie zuvor (Wir haben Verose in Error geändert), "Error" in "Debug" ändern. Da melden wir uns per Debugging an. Hier sind alle Log-Methoden:

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 also Log.d verwendet haben, checken wir Debug ein. Deshalb haben wir es auf Debug geändert.

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

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

Jetzt wissen wir also, dass mTextView null ist.

Ich beobachte meinen Code, jetzt bemerke ich etwas.

Ich habe private TextView mTextView an 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 ist mTextView null, weil ich vergessen habe, meiner App mitzuteilen, was es ist. Also füge ich diese Zeile hinzu, starte meine App und jetzt stürzt die App nicht ab.


24
Ab_

Dieses Popup wird nur angezeigt, wenn in Ihrem Code eine schwerwiegende Ausnahme auftritt, die die Ausführung der App stoppt. Es kann jede Ausnahme sein NullPointerException, OutOfMemoryException usw.

Die beste Möglichkeit, dies zu überprüfen, ist Logcat, wenn Sie die App noch in Android Studio entwickeln. Dies ist eine schnelle Möglichkeit, die Stapelverfolgung zu lesen und die Ursache der App zu überprüfen.

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

18
Ani

Überprüfen Sie Ihre Logcat Nachricht und sehen Sie sich Ihre Manifest Datei an. Es sollte etwas fehlen, wie das Definieren der Activity,User-Berechtigung` usw.

16
Manoj ahirwar

Sie können eines dieser Tools verwenden:

  1. adb logcat

  2. adb logcat> logs.txt (Mit Editoren können Sie Fehler öffnen und 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 (geben Sie command monitor ein oder öffnen Sie über die Benutzeroberfläche)

enter image description here

  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 ADB-Logcat-Filter und alles schwierig.

13
ShivBuyya

Sie müssen den Stack trace überprüfen

Wie geht das?

auf Ihrem IDE Überprüfen Sie das 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

11
alireza amini

In der folgenden showToast () -Methode müssen Sie einen anderen Parameter für den Kontext oder den Anwendungskontext übergeben, damit Sie es versuchen können.

  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();
}
10
Mayank Nema

Lassen Sie mich eine grundlegende Logcat-Analyse für das Erreichen eines Force Close (wenn die App nicht mehr funktioniert) teilen.

DOCS

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

HERE ist die Android-Seite über logcat

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

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 zum Befehl hinzufügen können, um die gewünschte Nachricht zu filtern und anzuzeigen. Dies ist persönlich. Ich verwende immer den folgenden Befehl, um den Zeitstempel der Nachricht zu erhalten:

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 enthält 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 sicherstellen, 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 zu Ihrer Nachricht überprüfen)

  • Welcher Fehler: Java.lang.NullPointerException

Ein NULL-Zeigerausnahmefehler

  • 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 FragmentActivity Objekt aufzurufen. Dieses Objekt war jedoch null, als Sie es getan haben.

  • Stack Trace: Stack Trace zeigt Ihnen die Reihenfolge der Methodenaufrufe ... 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 Methode onClick() 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)

usw....

Übersicht

Dies war nur eine Übersicht ... Nicht alle Protokolle sind einfach usw. ... Es dient nur dazu, die Idee zu teilen und Ihnen Informationen für den Einstieg bereitzustellen ...

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

9
W0rmH0le

Verwenden Sie LogCat und versuchen Sie herauszufinden, was zum Absturz der App führt.

Um Logcat anzuzeigen, wenn Sie Android Studio verwenden, 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ü Fehler aus. Diese enthält alle erforderlichen Informationen, die Sie beim Debuggen benötigen. Wenn das nicht hilft, posten Sie das LogCat als Bearbeitung für Ihre Frage und jemand wird Ihnen helfen.

8

Wenn Ihre App aus irgendeinem Grund ohne guten Stacktrace abstürzt. Versuchen Sie es von der ersten Zeile aus zu debuggen und gehen Sie Zeile für Zeile bis zum Absturz. Dann werden Sie eine Antwort erhalten, welche Leitung Ihnen Probleme bereitet. Möglicherweise könnten Sie es dann in try catch block einwickeln und eine Fehlerausgabe ausgeben.

7
felislynx.silae

Absturz während der Entwicklung

Probieren Sie mein Lieblingstool logview aus, um die Protokolle zu erhalten und sie während der Entwicklung zu analysieren.
Vergewissern Sie sich, dass ./logview und ./lib/logview.jar als ausführbar markiert sind, wenn Sie unter Linux ausgeführt werden.

Wenn es dir nicht gefällt, gibt es eine Menge Alternativen Desktop Log Viewer für Android .

Absturz in freier Wildbahn

Integrieren Sie ein Echtzeit-Crash-Reporting-Tool wie Firebase Crashlytics , um Stapelspuren von unbehandelten Ausnahmen zu erhalten, die auf den Geräten der Benutzer aufgetreten sind.

Lesen Sie So veröffentlichen Sie eine Buggy-App (und Live to Tell the Tale) , um mehr über den Umgang mit Fehlern im Außendienst zu erfahren.

5
naXa

Sie können diese Fehlermeldung auch ohne Stack-Trace oder weitere Fehlermeldungen erhalten.

In diesem Fall müssen Sie sicherstellen, dass Ihr Manifest Android korrekt konfiguriert ist (einschließlich aller Manifeste, die aus einer Bibliothek zusammengeführt werden, und aller Aktivitäten, die aus einer Bibliothek stammen), und der ersten in angezeigten Aktivität besondere Aufmerksamkeit schenken Ihre Anwendung in Ihren Manifest-Dateien.

5
Pelpotronic

Die Leute machen Fehler und so auch die Codierung.

Wenn jemals ein error passiert ist, erkundigen Sie sich immer beim Logcat mit dem roten Text, aber Sie können das echtes Problem bei blauem Text mit Unterstreichung in diesem roten Text herausfinden.

Stellen Sie sicher, dass Sie, wenn Sie ein neues activity erstellen, immer das activity in der AndroidManifest -Datei deklarieren.

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

4
Kopi Bryant

Logcat - m die Protokolle in der Entwicklungsphase von Android Studio zu überprüfen

Deaktivieren Sie zunächst Logcat und lassen Sie die App erneut abstürzen, damit Sie nur Details zu abgestürzten Protokollen erhalten. Sie müssen den Stack-Trace überprüfen

Während MyApp leider gestoppt hat. Dafür gibt es viele Gründe. Sie können dasselbe in Protokollen überprüfen. Hierfür können Sie das 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 (möglicherweise).
  5. Aktivität fehlt in AndroidManifest-Datei.
  6. In der AndroidManifest-Datei fehlt die Berechtigung.
  7. Häufigste NullPointerException.
  8. Deklariert aber nicht definiert.

So beheben Sie den Absturzfehler der App:

  • Behalte die obigen Punkte im Hinterkopf und gehe 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
Ashish

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

Danach finden Sie den Punkt, an dem Ihre App angehalten hat, um diesen Punkt zu beheben.

3
Mehul Solanki

Wenn Ihr Terminal keine interessanten Protokolle enthält (oder diese nicht direkt mit Ihrer App zusammenhängen), liegt das Problem möglicherweise an einer systemeigenen Bibliothek. In diesem Fall sollten Sie in Ihrem Terminal nach den "Tombstone" -Dateien suchen.

Der Standardspeicherort für die Tombstone-Dateien hängt von jedem Gerät ab. Ist dies jedoch der Fall, erhalten Sie ein Protokoll mit der Aufschrift: Tombstone written to: /data/tombstones/tombstone_06

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

2
zapotec