Malheureusement MyApp s'est arrêté. Comment je peux résoudre ça?

je développe une application, et chaque fois que je l'exécute, Je reçois le message:

malheureusement, MyApp s'est arrêté.

Que puis-je faire pour résoudre ce problème?


à propos de cette question - évidemment inspiré par Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer mes erreurs d'application? , il y a beaucoup de questions disant que leur application s'est effondrée, sans plus de détails. Cette question vise à enseigner aux programmeurs Android novices sur la façon d'essayer de résoudre leurs problèmes eux-mêmes, ou de poser les bonnes questions.

638
demandé sur naXa 2014-04-29 03:55:14

16 réponses

cette réponse décrit le processus de récupération de la trace de la pile. Déjà la trace de la pile? Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer mes erreurs d'application?

Le Problème

votre demande a cessé parce qu'un RuntimeException a été lancé.

Le plus commun d'entre eux est le NullPointerException .

Comment le résoudre?

chaque fois qu'une application Android tombe en panne (ou n'importe quelle application Java d'ailleurs), un Stack trace est écrit sur la console (dans ce cas, logcat). Cette pile contient des informations vitales pour résoudre votre problème.

Android Studio

Finding the stack trace in Android Studio

Dans la barre inférieure de la fenêtre, cliquez sur le Logcat bouton. Vous pouvez aussi appuyer sur alt + 6 . Assurez-vous que votre émulateur ou appareil est sélectionné dans le panneau Devices . Ensuite, essayez de trouver la trace de la pile, qui est indiqué en rouge. Il peut y avoir beaucoup de choses connectés dans logcat, donc vous pouvez avoir besoin de faire défiler un peu. Un moyen facile de trouver la trace de la pile est de nettoyer le logcat (en utilisant la corbeille sur la droite), et laisser l'application se planter à nouveau.

j'ai trouvé la trace de la pile, maintenant ce qui?

Yay! Tu es à mi-chemin pour résoudre ton problème.

Vous avez seulement besoin de savoir ce qui a exactement fait planter votre application, en analysant la trace de la pile.

lire sur les traces de pile dans " Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer mes erreurs d'application? "

Je ne peux toujours pas résoudre mon problème!

si vous avez trouvé votre Exception et la ligne où il s'est produit, et ne peut toujours pas comprendre comment le réparer, n'hésitez pas à poser une question sur StackOverflow.

essayez d'être aussi concis que possible: postez la trace de la pile, et le code pertinent (par exemple quelques lignes jusqu'à la ligne qui a lancé le Exception ).

594
répondu nhaarman 2018-03-12 13:45:14

vous pouvez utiliser l'outil de Bad de Google pour obtenir Logcat file pour analyser la question.

adb logcat > logcat.txt

ouvrir logcat.txt ficher et rechercher votre nom de demande. Il devrait y avoir des informations sur la raison de l'échec, le numéro de ligne ,Le nom de la classe, etc.

82
répondu Vlad Bezden 2017-10-21 21:04:48

tout d'abord, vous vérifiez quel point votre application a crashé ( Unfortunately, MyApp has stopped. ). Pour cela, vous pouvez utiliser Log.e("TAG","Message"); , en utilisant cette ligne vous pouvez voir l'application vous connecter dans logcat.

Après que vous trouvez que votre application a cessé son très facile à résoudre, à vos côtés.

24
répondu Hiren Vaghela 2016-09-14 04:13:27

il suffit de vérifier l'erreur dans log cat.

vous obtenez l'option log cat dans eclipse:

Fenêtre- > Afficher l'image- > autres- > Android - >Logcat

Journal de chat contient des erreurs.

vous pouvez également vérifier l'erreur en exécutant une application en mode de débogage. D'abord fixer le point de rupture après cela en faisant:

clic droit sur le projet->debug as - > Android application

19
répondu Rahil Ali 2015-11-21 01:18:02

Note: cette réponse utilise Android Studio 2.2.2

Note 2: je considère que votre appareil est connecté avec succès.


la première chose que vous faites lorsque votre application plante est de regarder dans le LogCat, au bas de Android Studio Il ya une barre d'outils avec une liste des menus:

image

cliquez sur" Android Monitor " (celui que j'ai souligné dans l'image ci-dessus. ^ )

Maintenant, vous obtiendrez quelque chose comme ceci:

image

changer" Verbose "en Error " maintenant, il ne montrera que vous avez enregistré des erreurs. Ne vous inquiétez pas à propos de tous ces les erreurs (si vous les avez).

image

Ok. Maintenant, faites ce que vous avez fait pour planter votre application. Après le crash de votre application, allez sur votre logcat. Vous devriez trouver un nouveau crash qui a beaucoup de at:x.x.x : et Caused by: TrumpIsPresidentException par exemple. Allez à la déclaration Caused by: dans votre logcat.

image

à côté de que Caused By: , il devrait y avoir L'Exception qui s'est produite. Dans mon cas, c'est une RuntimeException et sous elle il devrait y avoir une ligne qui contient un lien bleu tel que:

image

si cette Caused by: N'a pas de ligne avec un texte bleu quelque part en dessous, alors regardez pour un autre Caused by: qui fait.

cliquez sur ce lien bleu . Il devrait vous prendre à l'endroit où le problème s'est produit. Dans mon cas, il était dû à cette ligne:

throw new RuntimeException();

donc, maintenant je sais pourquoi il s'effondre. C'est parce que je lance l'exception moi-même. c'était une erreur évidente .


cependant, disons que j'ai une autre erreur:

java.lang.NullPointerException

j'ai vérifié mon logcat, j'ai cliqué sur le lien bleu qu'il m'a donné, et il m'a pris ici:

mTextView.setText(myString);

donc, maintenant je veux déboguer. Selon cette question de flux StackOverflow , une exception NullPointerException dit que quelque chose est null .

alors, trouvons ce qui est nul . Il y a deux possibilités. Soit mTextView est nul, soit myString est nul. Trouver dehors, avant la ligne mTextView.setText(mString) , j'ajoute ces deux lignes:

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

maintenant, comme nous l'avons fait précédemment (nous avons changé Verose en erreur), nous voulons changer "erreur" en "Debug". Depuis qu'on se connecte par débogage. Voici toutes les méthodes de Log:

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

donc , depuis que nous avons utilisé Log.d , nous vérifions dans Debug. C'est pourquoi nous l'avons changé de débogage.

Notice Log.d a un premier paramètre,dans notre cas"AppDebug". Cliquez sur le menu déroulant" pas de filtres " en haut à droite du logcat. Sélectionnez "Modifier la Configuration du filtre", donnez un nom à votre filtre, et dans" Log Tag "mettez"L'application de débogage". Cliquez sur "OK". Maintenant, vous devriez voir deux lignes dans le logcat:

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

donc maintenant nous savons que mTextView est null.

j'observe mon code, maintenant je remarque quelque chose.

j'ai private TextView mTextView , a déclaré au sommet de ma classe. Mais, je ne suis pas la définir.

en gros, J'ai oublié de le faire dans mon onCreate ():

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

donc c'est pour ça que mTextView est nul, parce que j'ai oublié de dire à mon application ce que c'est. J'ai donc ajouter cette ligne, exécuter mon application, et maintenant l'appli ne plante pas.


17
répondu Ab_ 2017-05-23 12:10:45

ce popup ne s'affiche que lorsque vous obtenez une exception fatale dans votre code qui arrête l'exécution de l'application. Il pourrait s'agir de N'importe quelle exception NullPointerException, Outofmoryexception etc.

la meilleure façon de vérifier est par Logcat si vous êtes encore en développement de l'application dans Android studio qui est un moyen rapide de lire la pile de trace et de vérifier la cause de l'application.

si votre application est déjà live, alors vous ne pouvez pas utiliser logcat. Donc, pour cela, vous pouvez mettre en œuvre Crashlytics pour vous fournir des rapports de bogue de toute exception qui se produit.

11
répondu Ani 2017-07-04 04:38:18

Vérifiez votre message Logcat et consultez votre fichier Manifest . Il devrait y avoir quelque chose qui manque comme définir la Activity, permission de L'utilisateur", etc.

9
répondu Manoj ahirwar 2016-12-15 12:35:55

vous pouvez utiliser l'un de ces outils:

  1. adb logcat

  2. ADB logcat > logs.txt (vous pouvez utiliser des éditeurs pour ouvrir et rechercher des erreurs.)

  3. eclipse logcat (si elle n'est pas visible dans eclipse, allez sur Windows - > Show View- > Others - > Android - >LogCat)

  4. Android Debug Monitor ou Android Device Monitor(type la commande moniteur ou ouvrez à l'aide de l'INTERFACE utilisateur)

enter image description here

  1. Android Studio

je suggère d'utiliser Android Debug Monitor , il est bon. Parce que eclipse se bloque quand Trop de logs sont là, et à travers le filtre logcat d'adb et tous difficiles.

8
répondu ShivBuyya 2016-07-07 10:38:02

vous devez vérifier le Stack trace

Comment faire?

sur votre IDE, vérifiez le formulaire LOGCAT de windows

si vous ne voyez pas les fenêtres logcat, allez sur ce chemin et ouvrez-le

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

si vous utilisez Google-Api aller à ce chemin ""

adb logcat > logcat.txt

6
répondu alireza amini 2015-07-13 08:37:51

Permettez-moi de partager une analyse Logcat de base pour quand vous rencontrez une force de fermeture (quand l'application cesse de fonctionner).

DOCS

outil de base D'Android pour collecter/analyser les journaux est le logcat.

ici est la page de l'Android à propos de logcat

si vous utilisez android Studio, vous pouvez également vérifier ce lien .

capture

essentiellement, vous pouvez capturer manuellement logcat avec la commande suivante (ou juste vérifier la fenêtre AndroidMonitor dans AndroidStudio):

adb logcat

il y a beaucoup de paramètres que vous pouvez ajouter à la commande qui vous aide à filtrer et à afficher le message que vous voulez... C'est personnel... J'utilise toujours la commande ci-dessous pour obtenir le timestamp message:

adb logcat -v time

vous pouvez rediriger la sortie vers un fichier et l'analyser dans un éditeur de texte.

analyse

si votre application tombe en panne, vous obtiendrez quelque chose comme:

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.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

cette partie du journal vous montre beaucoup d'informations:

  • quand la question Est Arrivée: 07-09 08:29:13.475

Il est important de bien vérifier si le problème est arrivé... Vous pouvez trouver plusieurs erreurs dans un journal... vous devez être sûr que vous vérifiez les messages appropriés:)

  • l'application s'est écrasé: com.example.khan.abc

de cette façon, vous savez quelle application s'est écrasée (pour être sûr que vous vérifiez les journaux de votre message)

  • quelle erreur: java.lang.NullPointerException

UNE Exception de Pointeur NULL erreur

  • Informations détaillées sur l'erreur: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

vous avez essayé d'appeler la méthode onBackPressed() à partir d'un objet FragmentActivity . Cependant, cet objet était null quand vous l'avez fait.

  • Stack Trace: Stack Trace vous montre l'ordre d'invocation de la méthode... Parfois, l'erreur se produit dans la méthode d'appel (et non dans la méthode appelée).

    à COM.exemple.Khan.ABC.AudioFragment$1.onClick (AudioFragment.java: 125)

Erreur qui s'est passé dans le fichier com.example.khan.abc.AudioFragment.java , à l'intérieur de onClick() méthode à la ligne: 125 (stacktrace montre la ligne d'erreur qui s'est passé)

il a été appelé par:

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

qui a été appelé par:

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

qui a été appelé par:

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

etc....

vue d'ensemble

ce n'était qu'un aperçu... Tous les logs ne sont pas simples, etc... Il s'agit simplement de partager l'idée et de vous fournir une information de base...

j'espère pouvoir vous aider... Concernant

5
répondu W0rmH0le 2016-07-14 03:21:35

dans la méthode showToast() ci-dessous, vous devez passer un autre paramètre pour le contexte ou le contexte de l'application pour pouvoir l'essayer.

  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();
}
5
répondu Mayank Nema 2017-05-24 14:48:13

utilisez le LogCat et essayer de trouver ce qui cause le plantage de l'application.

pour voir Logcat si vous utilisez Android Studio puis appuyez sur ALT + 6 ou

si vous utilisez Eclipse alors Fenêtre- > Open Perspective - > Other-LogCat

aller à la LogCat, à partir du menu déroulant Sélectionner erreur. Cela va contenir toutes les informations nécessaires pour vous aider à déboguer. Si cela ne vous aide pas, postez le LogCat comme une édition de votre question et quelqu'un vous aidera.

4
répondu Biswajit Karmakar 2016-05-15 07:45:20

si votre application pour une raison quelconque se bloque sans bon stacktrace. Essayez de déboguer partir de la première ligne, et aller ligne par ligne jusqu'à ce crash. Alors vous aurez la réponse, quelle ligne vous cause des problèmes. Proably vous pourriez alors l'envelopper dans le bloc de capture d'essai et imprimer la sortie d'erreur.

2
répondu felislynx.silae 2017-10-02 15:07:36

vous pouvez également obtenir ce message d'erreur par lui-même, sans aucune trace de pile ou tout autre message d'erreur.

dans ce cas, vous devez vous assurer que votre manifeste Android est configuré correctement (y compris tout manifeste fusionnant se produire à partir d'une bibliothèque et toute activité qui viendrait d'une bibliothèque), et faire une attention particulière à la première activité affichée dans votre application dans vos fichiers manifestes.

1
répondu Pelpotronic 2015-03-22 08:50:58

Crash pendant le développement

Essayer logview-0.20 pour obtenir les fichiers journaux et les analyser au cours du développement.

Assurez-vous de marquer ./logview et ./lib/logview.jar comme exécutable sous Linux.

Si vous ne l'aimez pas, il y a beaucoup d'alternative bureau du journal de téléspectateurs pour Android .

Crash dans la nature

intègre un outil de Compte rendu d'accident en temps réel tel que Firebase Crashlytics afin d'obtenir des empilements d'exceptions non contrôlées qui se sont produites sur les appareils des utilisateurs.

Lire comment publier une application Buggy (et vivre pour raconter l'histoire) pour en savoir plus sur la manipulation des bogues dans le domaine.

0
répondu naXa 2018-09-11 08:41:15

les gens font des erreurs, et donc aussi du codage.

quand jamais n'importe quel error est arrivé, toujours vérifier avec le logcat avec le texte en couleur rouge cependant u peut trouver le vrai problème en texte en couleur bleue avec le soulignement dans ces texte en couleur rouge.

assurez-vous que si u crée un nouveau activity , déclarez toujours le activity dans le fichier AndroidManifest .

si vous ajoutez une Permission, déclarez-la dans le fichier AndroidMainifest aussi.

-1
répondu Kopi Bryant 2018-05-20 07:15:19