Infelizmente, o MyApp parou. Como posso resolver isso?

Apr 29 2014

Estou desenvolvendo um aplicativo e sempre que o executo, recebo a mensagem:

Infelizmente, MyApp parou.

O que posso fazer para resolver isso?


Sobre esta questão - obviamente inspirado em O que é rastreamento de pilha e como posso usá-lo para depurar meus erros de aplicativo? , há muitas perguntas informando que o aplicativo travou, sem maiores detalhes. Esta pergunta tem como objetivo instruir os programadores Android novatos sobre como tentar resolver seus próprios problemas ou fazer as perguntas certas.

Respostas

734 nhaarman Apr 29 2014 at 06:55

Esta resposta descreve o processo de recuperação do rastreamento de pilha. Já tem o rastreamento de pilha? Leia sobre os rastreamentos de pilha em " O que é rastreamento de pilha e como posso usá-lo para depurar meus erros de aplicativo? "

O problema

Seu aplicativo foi encerrado porque um não capturado RuntimeExceptionfoi lançado.
O mais comum deles é o NullPointerException.

Como resolver isso?

Cada vez que um aplicativo Android trava (ou qualquer aplicativo Java para esse assunto), um Stack traceé gravado no console (neste caso, logcat). Este rastreamento de pilha contém informações vitais para resolver seu problema.

Android Studio

Na barra inferior da janela, clique no Logcatbotão. Alternativamente, você pode pressionar alt+ 6. Certifique-se de que seu emulador ou dispositivo esteja selecionado no Devicespainel. Em seguida, tente encontrar o rastreamento de pilha, que é mostrado em vermelho. Pode haver muitas coisas registradas no logcat, então você pode precisar rolar um pouco. Uma maneira fácil de encontrar o rastreamento de pilha é limpar o logcat (usando a lixeira à direita) e deixar o aplicativo travar novamente.

Encontrei o rastreamento de pilha, e agora?

Yay! Você está no meio do caminho para resolver seu problema.
Você só precisa descobrir o que exatamente fez seu aplicativo travar, analisando o rastreamento de pilha.

Leia sobre os rastreamentos de pilha em " O que é rastreamento de pilha e como posso usá-lo para depurar meus erros de aplicativo? "

Ainda não consigo resolver o meu problema!

Se você encontrou o seu Exceptione a linha onde ocorreu e ainda não consegue descobrir como corrigi-lo, não hesite em fazer uma pergunta no StackOverflow.

Tente ser o mais conciso possível: poste o rastreamento da pilha e o código relevante (por exemplo, algumas linhas até a linha que gerou o Exception).

121 VladBezden Mar 23 2015 at 06:06

Você pode usar ferramenta ADB do Google para obter Logcat filepara analisar a questão.

adb logcat > logcat.txt

abra o logcat.txtarquivo e pesquise o nome do seu aplicativo. Deve haver informações sobre o motivo da falha, o número da linha, o nome da classe, etc.

38 HirenVaghela Mar 18 2015 at 15:01

Primeiro, você verifica em qual ponto seu aplicativo travou ( Unfortunately, MyApp has stopped.). Para isso, você pode usar Log.e("TAG", "Message");, nesta linha, você pode ver o log do seu aplicativo no logcat.

Depois disso, você descobre qual ponto seu aplicativo parou é muito fácil de resolver ao seu lado.

29 RahilAli Jun 11 2015 at 17:58

Basta verificar o erro no log cat.

Você obtém a opção log cat no eclipse:

janela-> mostrar visualização-> outros-> Android-> Logcat

O gato de registro contém erro.

Caso contrário, você também pode verificar o erro executando um aplicativo no modo de depuração. Em primeiro lugar, defina o ponto de interrupção depois disso, fazendo:

clique com o botão direito em projeto-> depurar como-> aplicativo Android

28 AliBdeir Nov 06 2016 at 16:23

Observação: esta resposta está usando o Android Studio 2.2.2

Nota 2: Estou considerando que seu dispositivo foi conectado com sucesso.


A primeira coisa que você faz quando seu aplicativo trava é olhar para o LogCat, na parte inferior do Android Studio há uma barra de ferramentas com uma lista de menus:

Clique em "Monitor Android" (o que sublinhei na imagem acima. ^)

Agora, você obterá algo assim:

Altere " Verbose" para " Error" Agora só mostrará os erros registrados. Não se preocupe com todos esses erros (se você os tiver) agora.

Está bem. Agora, faça o que você fez para travar seu aplicativo. Depois que seu aplicativo travar, vá para o logcat. Você deve encontrar um novo log de travamento que contém muitos at:x.x.x: e Caused by: TrumpIsPresidentExceptionpor exemplo. Vá para essa Caused by:declaração em seu logcat.

Ao lado disso Caused By:, deve haver a Exceção que aconteceu. No meu caso, é um RuntimeExceptione abaixo dele deve haver uma linha que contém um link azul , como:

SeCaused by: NÃO houver uma linha com um texto azul em algum lugar abaixo dela, procure outra Caused by:que tenha.

Clique no link azul . Deve levá-lo ao local onde o problema ocorreu. No meu caso, foi devido a esta linha:

throw new RuntimeException();

Então, agora eu sei por que ele está travando. É porque eu mesmo estou lançando a exceção. Este foi um erro óbvio .


No entanto, digamos que recebi outro erro:

java.lang.NullPointerException

Verifiquei meu logcat, cliquei no link azul que ele me forneceu e me trouxe até aqui:

mTextView.setText(myString);

Então, agora eu quero depurar. De acordo com esta pergunta StackOverflow , um NullPointerException diz que algo é null.

Então, vamos descobrir o que é nulo . Existem duas possibilidades. Ou mTextViewé nulo ou myStringé nulo. Para descobrir, antes da mTextView.setText(mString)linha, adiciono estas duas linhas:

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

Agora, como fizemos anteriormente (alteramos Verose para Erro), queremos alterar "Erro" para "Depurar". Já que estamos registrando por depuração. Aqui estão todos os métodos de 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

Então, como usamos Log.d, estamos verificando Debug. É por isso que mudamos para depurar.

Notice Log.dtem um primeiro parâmetro, em nosso caso "AppDebug". Clique no menu suspenso "Sem filtros" no canto superior direito do logcat. Selecione "Editar Configuração do Filtro", dê um nome ao seu filtro e em "Log Tag" coloque "App Debug". Clique OK". Agora, você deve ver duas linhas no logcat:

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

Portanto, agora sabemos que mTextView é nulo.

Observo meu código, agora percebo algo.

Tenho private TextView mTextViewdeclarado no topo da minha classe. Mas, eu não estou definindo isso.

Basicamente, esqueci de fazer isso no meu onCreate ():

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

É por ISSO que mTextViewé nulo, porque esqueci de dizer ao meu aplicativo o que é. Então, adiciono essa linha, executo meu aplicativo e agora o aplicativo não trava.


20 Ani Jul 04 2017 at 11:38

Este pop-up é exibido apenas quando você obtém uma exceção fatal em seu código que interrompe a execução do aplicativo. Pode ser qualquer exceção NullPointerException, OutOfMemoryExceptionetc.

A melhor maneira de verificar é por meio do Logcat se você ainda estiver desenvolvendo o aplicativo no Android Studio, que é uma maneira rápida de ler o rastreamento da pilha e verificar a causa do aplicativo.

Se seu aplicativo já estiver ativo, você não pode usar o logcat . Portanto, para isso você pode implementar Crashlyticspara fornecer relatórios de bug de qualquer exceção que ocorra.

18 Manojahirwar Jun 29 2015 at 18:48

Verifique sua Logcatmensagem e veja seu Manifestarquivo. Deve haver algo faltando, como definir a Activity,permissão do usuário, etc.

15 ShivBuyya Nov 03 2015 at 12:47

Você pode usar qualquer uma destas ferramentas:

  1. adb logcat

  2. adb logcat> logs.txt (você pode usar editores para abrir e pesquisar erros).

  3. eclipse logcat (se não estiver visível no eclipse, vá para Windows-> Mostrar Visualização-> Outros-> Android-> LogCat)

  4. Android Debug Monitor ou Android Device Monitor (digite command monitor ou abra através da IU)

  1. Android Studio

Eu sugiro usar o Android Debug Monitor , é bom. Porque eclipse trava quando muitos logs estão lá, e através do filtro adb logcat e tudo é difícil.

13 alirezaamini Jul 13 2015 at 15:37

Você tem que verificar o Stack trace

Como fazer isso?

em seu IDE Verifique as janelas do formulário LOGCAT

Se você não consegue ver as janelas do logcat, vá para este caminho e abra-o

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

se você estiver usando Google-Api vá para este caminho

adb logcat> logcat.txt

12 MayankNema Apr 03 2017 at 16:37

No método showToast () a seguir, você deve passar outro parâmetro para o contexto ou contexto do aplicativo, para que possa experimentá-lo.

  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

Deixe-me compartilhar uma análise básica do Logcat para quando você encontrar um Forçar fechamento (quando o aplicativo parar de funcionar).

DOCS

A ferramenta básica do Android para coletar / analisar logs é o logcat.

AQUI está a página do Android sobre o logcat

Se você usa o Android Studio, também pode verificar este LINK .

Capturando

Basicamente, você pode capturar MANUALMENTE o logcat com o seguinte comando (ou apenas verificar a janela AndroidMonitor no AndroidStudio):

adb logcat

Existem muitos parâmetros que você pode adicionar ao comando que ajudam a filtrar e exibir a mensagem que você deseja ... Isso é pessoal ... Eu sempre uso o comando abaixo para obter o carimbo de data / hora da mensagem:

adb logcat -v time

Você pode redirecionar a saída para um arquivo e analisá-la em um Editor de Texto.

Analisando

Se seu aplicativo estiver travando, você obterá algo como:

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

Esta parte do registro mostra muitas informações:

  • Quando o problema aconteceu: 07-09 08:29:13.475

É importante verificar quando o problema aconteceu ... Você pode encontrar vários erros em um log ... você deve ter certeza de que está verificando as mensagens corretas :)

  • Qual aplicativo travou: com.example.khan.abc

Dessa forma, você sabe qual aplicativo travou (para ter certeza de que está verificando os registros sobre sua mensagem)

  • Qual ERRO: java.lang.NullPointerException

Um erro de exceção de ponteiro NULL

  • Informações detalhadas sobre o erro: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

Você tentou chamar o método onBackPressed()de um FragmentActivityobjeto. No entanto, esse objeto era nullquando você o fez.

  • Stack Trace: Stack Trace mostra a ordem de invocação do método ... Às vezes, o erro acontece no método de chamada (e não no método chamado).

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

O erro aconteceu no arquivo com.example.khan.abc.AudioFragment.java, dentro do onClick()método na linha: 125(stacktrace mostra a linha em que o erro aconteceu)

Foi chamado por:

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

Que foi chamado por:

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

que foi chamado por:

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

etc ....

visão global

Esta foi apenas uma visão geral ... Nem todos os logs são simples, mas o erro fornece o problema específico e o verboso mostra todos os problemas ... É apenas para compartilhar a ideia e fornecer informações básicas para você ...

Espero poder te ajudar de alguma forma ... Atenciosamente

9 BiswajitKarmakar May 15 2016 at 14:45

Use o LogCat e tente descobrir o que está causando o travamento do aplicativo.

Para ver o Logcat se você usar o Android Studio , pressione ALT + 6 ou

se você usar Eclipse, em seguida, Janela -> Abrir Perspectiva -> Outro - LogCat

Vá para o LogCat, no menu suspenso selecione erro. Isso conterá todas as informações necessárias para ajudá-lo a depurar. Se isso não ajudar, poste o LogCat como uma edição para sua pergunta e alguém o ajudará.

8 felislynx.silae Oct 02 2017 at 22:07

Se seu aplicativo por algum motivo travar sem um bom rastreamento de pilha. Tente depurar da primeira linha e siga linha por linha até travar. Então você terá a resposta, qual linha está causando problemas. Provavelmente, você poderia envolvê-lo no bloco try catch e na saída de erro de impressão.

6 Pelpotronic Mar 22 2015 at 15:50

Você também pode obter essa mensagem de erro por conta própria, sem qualquer rastreamento de pilha ou qualquer outra mensagem de erro.

Nesse caso, você precisa se certificar de que seu manifesto Android está configurado corretamente (incluindo qualquer mesclagem de manifesto ocorrendo de uma biblioteca e qualquer atividade que viria de uma biblioteca) e prestar atenção especial à primeira atividade exibida em seu aplicativo em seus arquivos de manifesto .

6 naXa Sep 11 2018 at 15:35

Falha durante o desenvolvimento

Experimente minha ferramenta favorita logview para obter os logs e analisá-los durante o desenvolvimento.
Certifique-se de marcar ./logviewe ./lib/logview.jarcomo executável ao executar no Linux.

Se você não gostar, há muitos visualizadores alternativos de log da área de trabalho para Android .

Bater na selva

Integre uma ferramenta de relatório de falhas em tempo real, como Firebase Crashlytics , para obter rastreamentos de pilha de exceções não tratadas que ocorreram nos dispositivos dos usuários.

Leia Como lançar um aplicativo com erros (e viver para contar a história) para saber mais sobre como lidar com bugs em campo.

5 KopiBryant May 20 2018 at 00:24

As pessoas cometem erros e, portanto, codificam também.

Sempre que algo erroracontecer, sempre verifique com o logcat com o texto em cor vermelha, porém você pode descobrir o problema real no texto de cor azul com sublinhado no texto de cor vermelha.

Certifique-se de que se vc criar um novo activity, sempre declare o activityno AndroidManifestarquivo.

Se adicionar Permissão, declare-a também no AndroidMainifestarquivo.

5 Ashish Mar 26 2019 at 11:42

Logcat - Para verificar os registros na fase de desenvolvimento do Android Studio

Limpe inicialmente o Logcat e deixe o aplicativo travar novamente para que você possa obter apenas os detalhes do log travado. Você tem que verificar o rastreamento de pilha

Embora, infelizmente, MyApp tenha parado. Existem muitas razões para isso. Você pode verificar o mesmo nos logs. Para isso, pode-se usar o Log.e ("TAG", "Mensagem");

Erro comum durante a falha do aplicativo como:

  1. Erro de codificação (uso incorreto de palavras-chave).
  2. Nome da propriedade incompatível.
  3. Plug-in não suportado (talvez).
  4. Versão incompatível (talvez).
  5. Atividade ausente no arquivo AndroidManifest.
  6. Permissão ausente no arquivo AndroidManifest.
  7. NullPointerException mais comum.
  8. Declarado, mas não definido.

Para resolver o erro de travamento do aplicativo:

  • Tenha em mente os pontos acima e analise-os.
  • Com o erro, você obterá o nome do arquivo também na cor azul (clique sobre eles e pule para o código em que o erro está ocorrendo).
4 MehulSolanki May 22 2019 at 17:40

Primeiro, você precisa verificar onde e por que seu aplicativo travou. (Unfortunately, MyApp has stopped.).Com a ajuda de LOG, você pode descobrir o que deu errado.

Depois disso, você descobre em que ponto seu aplicativo parou de corrigir isso do seu ponto.

4 zapotec Jun 12 2019 at 20:07

Se você não tem nenhum tipo de log interessante em seu terminal (ou eles não estão diretamente relacionados ao seu aplicativo), talvez seu problema seja devido a uma biblioteca nativa. Nesse caso, você deve verificar os arquivos "tombstone" dentro do seu terminal.

O local padrão para os arquivos de marca para exclusão depende de cada dispositivo, mas se for esse o caso, você terá um registro informando: Tombstone written to: /data/tombstones/tombstone_06

Para obter mais informações, verifique em https://source.android.com/devices/tech/debug .

2 MohsenEmami Mar 16 2020 at 17:18

Também executar este comando no terminal pode ajudar a encontrar o problema:

gradlew build > log.txt 2>details.txt

então você deve ir para a localização do arquivo gradlew em ler dois arquivos de log acima.