Purtroppo MyApp si è fermata. Come posso risolvere questo?

Apr 29 2014

Sto sviluppando un'applicazione e ogni volta che la eseguo ricevo il messaggio:

Sfortunatamente, MyApp si è interrotta.

Cosa posso fare per risolvere questo problema?


A proposito di questa domanda, ovviamente ispirata a Che cos'è una traccia dello stack e come posso utilizzarla per eseguire il debug degli errori dell'applicazione? , ci sono molte domande che affermano che la loro applicazione è andata in crash, senza ulteriori dettagli. Questa domanda ha lo scopo di istruire i programmatori Android inesperti su come provare a risolvere i propri problemi da soli o porre le domande giuste.

Risposte

734 nhaarman Apr 29 2014 at 06:55

Questa risposta descrive il processo di recupero della traccia dello stack. Hai già la traccia dello stack? Leggere le analisi dello stack in " Che cos'è un'analisi dello stack e come posso utilizzarla per eseguire il debug degli errori dell'applicazione? "

Il problema

La tua applicazione si è chiusa perché è RuntimeExceptionstato lanciato un messaggio non rilevato .
Il più comune di questi è il NullPointerException.

Come risolverlo?

Ogni volta che un'applicazione Android si arresta in modo anomalo (o qualsiasi applicazione Java per quella materia), Stack traceviene scritto a sulla console (in questo caso, logcat). Questa analisi dello stack contiene informazioni vitali per risolvere il problema.

Android Studio

Nella barra inferiore della finestra, fare clic sul Logcatpulsante. In alternativa, puoi premere alt+ 6. Assicurati che il tuo emulatore o dispositivo sia selezionato nel Devicespannello. Quindi, prova a trovare la traccia dello stack, che è mostrata in rosso. Potrebbero esserci molte cose registrate in logcat, quindi potrebbe essere necessario scorrere un po '. Un modo semplice per trovare la traccia dello stack è cancellare il logcat (utilizzando il cestino a destra) e lasciare che l'app si blocchi di nuovo.

Ho trovato la traccia dello stack, e adesso?

Sìì! Sei a metà strada per risolvere il tuo problema.
Hai solo bisogno di scoprire cosa ha causato esattamente il crash dell'applicazione, analizzando la traccia dello stack.

Leggere le analisi dello stack in " Che cos'è un'analisi dello stack e come posso utilizzarla per eseguire il debug degli errori dell'applicazione? "

Non riesco ancora a risolvere il mio problema!

Se hai trovato il tuo Exceptione la riga in cui si è verificato, e ancora non riesci a capire come risolverlo, non esitare a fare una domanda su StackOverflow.

Cerca di essere il più conciso possibile: inserisci la traccia dello stack e il codice pertinente (ad esempio, poche righe fino alla riga che ha lanciato il Exception).

121 VladBezden Mar 23 2015 at 06:06

È possibile utilizzare strumento di ADB di Google per arrivare Logcat filead analizzare la questione.

adb logcat > logcat.txt

apri il logcat.txtfile e cerca il nome dell'applicazione. Dovrebbero esserci informazioni sul motivo per cui non è riuscito, il numero di riga, il nome della classe, ecc.

38 HirenVaghela Mar 18 2015 at 15:01

Innanzitutto, controlla in quale punto la tua app è andata in crash ( Unfortunately, MyApp has stopped.). Per questo, puoi usare Log.e("TAG", "Message");, usando questa linea puoi vedere la tua app in logcat.

Dopodiché, scopri il punto in cui la tua app si è fermata è molto facile da risolvere al tuo fianco.

29 RahilAli Jun 11 2015 at 17:58

Basta controllare l'errore nel log cat.

Ottieni l'opzione log cat da in eclipse:

finestra-> mostra vista-> altri-> Android-> Logcat

Log cat contiene un errore.

Altrimenti puoi anche controllare l'errore eseguendo un'applicazione in modalità debug. In primo luogo impostare il punto di interruzione dopo di che facendo:

fare clic con il tasto destro su progetto-> debug come-> applicazione Android

28 AliBdeir Nov 06 2016 at 16:23

Nota: questa risposta utilizza Android Studio 2.2.2

Nota 2: sto considerando che il tuo dispositivo è connesso correttamente.


La prima cosa che fai quando la tua applicazione si arresta in modo anomalo è guardare nel LogCat, nella parte inferiore di Android Studio c'è una barra degli strumenti con un elenco di menu:

Fare clic sul "Monitor Android" (quello che ho sottolineato nell'immagine sopra. ^)

Ora otterrai qualcosa del genere:

Cambia " Verbose" in " Error" Ora mostrerà solo gli errori registrati. Non preoccuparti di tutti questi errori (se li hai) ora.

Ok. Ora, fai quello che hai fatto per bloccare la tua app. Dopo che la tua app si arresta in modo anomalo, vai al tuo logcat. Dovresti trovare un nuovo registro di arresto anomalo che contiene molti at:x.x.x: e Caused by: TrumpIsPresidentExceptionper esempio. Vai a quella Caused by:dichiarazione nel tuo logcat.

Accanto a ciò Caused By:, dovrebbe esserci l'eccezione che è accaduta. Nel mio caso, è una RuntimeExceptione sotto dovrebbe esserci una riga che contiene un collegamento blu come:

SeCaused by: NON ha una riga con un testo blu da qualche parte sotto, cercane un'altra Caused by:che lo faccia.

Fare clic su quel collegamento blu . Dovrebbe portarti dove si è verificato il problema. Nel mio caso, era dovuto a questa linea:

throw new RuntimeException();

Quindi, ora so perché si sta bloccando. È perché sto lanciando l'eccezione io stesso. Questo è stato un errore evidente .


Tuttavia, diciamo che ho ricevuto un altro errore:

java.lang.NullPointerException

Ho controllato il mio logcat, ho fatto clic sul collegamento blu che mi ha fornito e mi ha portato qui:

mTextView.setText(myString);

Quindi, ora voglio eseguire il debug. Secondo questa domanda StackOverflow , una NullPointerException dice che qualcosa è null.

Quindi, scopriamo cosa è nullo . Ci sono due possibilità. O mTextViewè nullo o myStringè nullo. Per scoprirlo, prima della mTextView.setText(mString)riga, aggiungo queste due righe:

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

Ora, come abbiamo fatto in precedenza (abbiamo cambiato Verose in Error), vogliamo cambiare "Error" in "Debug". Dal momento che stiamo registrando tramite il debug. Ecco tutti i metodi di registro:

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

Quindi, da quando abbiamo usato Log.d, stiamo controllando Debug. Ecco perché l'abbiamo modificato per eseguire il debug.

L'avviso Log.dha un primo parametro, nel nostro caso "AppDebug". Fare clic sul menu a discesa "Nessun filtro" in alto a destra del logcat. Seleziona "Modifica configurazione filtro", dai un nome al tuo filtro e in "Tag di log" metti "Debug app". Fare clic su "OK". Ora dovresti vedere due righe nel logcat:

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

Quindi ora sappiamo che mTextView è nullo.

Osservo il mio codice, ora noto qualcosa.

Mi sono private TextView mTextViewdichiarato al primo posto della mia classe. Ma non lo sto definendo.

Fondamentalmente mi sono dimenticato di farlo nel mio onCreate ():

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

Ecco perché mTextViewè nullo, perché ho dimenticato di dire alla mia app di cosa si tratta. Quindi aggiungo quella riga, eseguo la mia app e ora l'app non si blocca.


20 Ani Jul 04 2017 at 11:38

Questo popup viene visualizzato solo quando si ottiene un'eccezione irreversibile nel codice che interrompe l'esecuzione dell'app. Potrebbe essere un'eccezione NullPointerException, OutOfMemoryExceptionecc.

Il modo migliore per controllare è tramite Logcat se stai ancora sviluppando l'app in Android Studio, che è un modo rapido per leggere la traccia dello stack e verificare la causa dell'app.

Se la tua app è già attiva, non puoi usare logcat . Quindi, per questo puoi implementare Crashlyticsper fornire segnalazioni di bug di qualsiasi eccezione che si verifica.

18 Manojahirwar Jun 29 2015 at 18:48

Controlla il tuo Logcatmessaggio e guarda il tuo Manifestfile. Dovrebbe mancare qualcosa come la definizione Activity,dell'autorizzazione dell'utente`, ecc.

15 ShivBuyya Nov 03 2015 at 12:47

Puoi utilizzare uno qualsiasi di questi strumenti:

  1. adb logcat

  2. adb logcat> logs.txt (puoi usare gli editor per aprire e cercare gli errori.)

  3. eclipse logcat (Se non è visibile in eclipse, vai su Windows-> Mostra vista-> Altri-> Android-> LogCat)

  4. Android Debug Monitor o Android Device Monitor (digita command monitor o apri tramite UI)

  1. Android Studio

Suggerisco di utilizzare Android Debug Monitor , va bene. Perché eclipse si blocca quando ci sono troppi registri e attraverso il filtro adb logcat e tutto difficile.

13 alirezaamini Jul 13 2015 at 15:37

Devi controllare il file Stack trace

Come farlo?

sul tuo IDE Controlla il modulo di Windows LOGCAT

Se non riesci a vedere le finestre di logcat, vai in questo percorso e aprilo

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

se stai usando Google-Api, segui questo percorso

adb logcat> logcat.txt

12 MayankNema Apr 03 2017 at 16:37

Nel metodo showToast () sotto devi passare un altro parametro per il contesto o il contesto dell'applicazione, così puoi provarlo.

  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

Permettimi di condividere un'analisi di Logcat di base per quando incontri una chiusura forzata (quando l'app smette di funzionare).

DOCS

Lo strumento di base di Android per raccogliere / analizzare i log è il logcat.

QUI è la pagina di Android su logcat

Se utilizzi Android Studio, puoi anche controllare questo LINK .

Catturare

Fondamentalmente, puoi catturare MANUALMENTE logcat con il seguente comando (o semplicemente controllare la finestra AndroidMonitor in AndroidStudio):

adb logcat

Ci sono molti parametri che puoi aggiungere al comando che ti aiutano a filtrare e visualizzare il messaggio che desideri ... Questo è personale ... Uso sempre il comando seguente per ottenere il timestamp del messaggio:

adb logcat -v time

È possibile reindirizzare l'output a un file e analizzarlo in un editor di testo.

Analizzando

Se la tua app si blocca, otterrai qualcosa del tipo:

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

Questa parte del registro mostra molte informazioni:

  • Quando si è verificato il problema: 07-09 08:29:13.475

È importante controllare quando si è verificato il problema ... Potresti trovare diversi errori in un registro ... devi essere sicuro di controllare i messaggi corretti :)

  • Quale app si è bloccata: com.example.khan.abc

In questo modo, sai quale app si è arrestata in modo anomalo (per essere sicuro di controllare i log del tuo messaggio)

  • Quale ERRORE: java.lang.NullPointerException

Errore di eccezione del puntatore NULL

  • Informazioni dettagliate sull'errore: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

Hai provato a chiamare il metodo onBackPressed()da un FragmentActivityoggetto. Tuttavia, quell'oggetto era nullquando l'hai fatto.

  • Stack Trace: Stack Trace mostra l'ordine di chiamata del metodo ... A volte, l'errore si verifica nel metodo chiamante (e non nel metodo chiamato).

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

Si è verificato un errore nel file com.example.khan.abc.AudioFragment.java, all'interno del onClick()metodo alla riga: 125(stacktrace mostra la riga in cui si è verificato l'errore)

È stato chiamato da:

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

Che è stato chiamato da:

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

che è stato chiamato da:

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

eccetera....

Panoramica

Questa era solo una panoramica ... Non tutti i registri sono semplici ma l'errore fornisce un problema specifico e dettagliatamente mostra tutti i problemi ... Serve solo per condividere l'idea e fornire informazioni di livello base ...

Spero di poterti aiutare in qualche modo ... Saluti

9 BiswajitKarmakar May 15 2016 at 14:45

Usa LogCat e prova a trovare la causa dell'arresto anomalo dell'app.

Per vedere Logcat se usi Android Studio, premi ALT + 6 o

se usi Eclipse, allora Finestra -> Apri prospettiva -> Altro - LogCat

Vai a LogCat, dal menu a discesa seleziona errore. Questo conterrà tutte le informazioni richieste per aiutarti a eseguire il debug. Se ciò non aiuta, pubblica LogCat come modifica alla tua domanda e qualcuno ti aiuterà.

8 felislynx.silae Oct 02 2017 at 22:07

Se la tua app per qualche motivo si arresta in modo anomalo senza un buon stacktrace. Prova a eseguire il debug dalla prima riga e vai riga per riga fino al crash. Quindi avrai una risposta, quale linea ti sta causando problemi. Probabilmente potresti quindi includerlo in try catch block e print error output.

6 Pelpotronic Mar 22 2015 at 15:50

È inoltre possibile ottenere questo messaggio di errore da solo, senza alcuna traccia dello stack o ulteriori messaggi di errore.

In questo caso è necessario assicurarsi che il manifest di Android sia configurato correttamente (inclusa qualsiasi unione di manifest che si verifica da una libreria e qualsiasi attività che proviene da una libreria) e prestare particolare attenzione alla prima attività visualizzata nell'applicazione nei file manifest .

6 naXa Sep 11 2018 at 15:35

Crash durante lo sviluppo

Prova il mio strumento logview preferito per ottenere i log e analizzarli durante lo sviluppo.
Assicurati di contrassegnare ./logviewe ./lib/logview.jarcome eseguibile durante l'esecuzione in Linux.

Se non ti piace, ci sono molti visualizzatori di log desktop alternativi per Android .

Crash in the wild

Integra uno strumento di segnalazione degli arresti anomali in tempo reale come Firebase Crashlytics per ottenere stacktrace di eccezioni non gestite che si sono verificate sui dispositivi degli utenti.

Leggi Come rilasciare un'app buggy (e vivere per raccontare la storia) per saperne di più sulla gestione dei bug sul campo.

5 KopiBryant May 20 2018 at 00:24

Le persone commettono errori e quindi anche la codifica.

Quando mai erroraccaduto, controlla sempre con il logcat con il testo in colore rosso, tuttavia puoi scoprire il vero problema nel testo di colore blu con sottolineato in quel testo di colore rosso.

Assicurati che se ne crei uno nuovo activity, dichiara sempre activityil AndroidManifestfile nel file.

Se si aggiunge l'autorizzazione, dichiararla anche nel AndroidMainifestfile.

5 Ashish Mar 26 2019 at 11:42

Logcat - Per controllare i log nella fase di sviluppo di Android Studio

Inizialmente cancella Logcat e lascia che l'app si arresti di nuovo in modo da poter ottenere solo i dettagli del registro arrestati. Devi controllare la traccia dello Stack

Mentre, purtroppo, MyApp si è fermata. Ci sono molte ragioni per questo. Puoi controllare lo stesso nei log. Per questo, puoi usare Log.e ("TAG", "Message");

Errore comune durante l'arresto anomalo dell'app come:

  1. Errore di codifica (uso errato delle parole chiave).
  2. Nome proprietà non corrispondente.
  3. Plugin non supportato (forse).
  4. Versione non corrispondente (forse).
  5. Attività mancante nel file AndroidManifest.
  6. Autorizzazione mancante nel file AndroidManifest.
  7. NullPointerException più comune.
  8. Dichiarato ma non definito.

Per risolvere l'errore di arresto anomalo dell'app:

  • Tieni a mente i punti precedenti e analizzali.
  • Con l'errore, otterrai il nome del file anche in colore blu (fai clic su di essi e salta al codice da errore si verifica).
4 MehulSolanki May 22 2019 at 17:40

Per prima cosa, devi controllare dove e perché la tua app è andata in crash (Unfortunately, MyApp has stopped.).Con l'aiuto di LOG, puoi capire cosa è andato storto.

Dopodiché, scopri il punto in cui la tua app ha smesso di risolverlo dal tuo punto.

4 zapotec Jun 12 2019 at 20:07

Se non hai alcun tipo di log interessante nel tuo terminale (o non sono direttamente correlati alla tua app), forse il tuo problema è dovuto a una libreria nativa. In tal caso, dovresti controllare i file "tombstone" nel tuo terminale.

La posizione predefinita per i file tombstone dipende da ogni dispositivo, ma in tal caso, avrai un registro che dice: Tombstone written to: /data/tombstones/tombstone_06

Per ulteriori informazioni, controlla su https://source.android.com/devices/tech/debug .

2 MohsenEmami Mar 16 2020 at 17:18

Anche l'esecuzione di questo comando nel terminale può aiutare a trovare il problema:

gradlew build > log.txt 2>details.txt

quindi dovresti andare alla posizione del file gradlew in leggere due file di registro sopra.