Desafortunadamente MyApp se ha detenido.¿Cómo puedo resolver esto?

java android debugging kotlin crash


Estoy desarrollando una aplicación,y cada vez que la ejecuto,recibo el mensaje:

Desafortunadamente,MyApp se ha detenido.

¿Qué puedo hacer para resolver esto?


Acerca de esta pregunta, obviamente inspirada en ¿Qué es un seguimiento de pila y cómo puedo usarlo para depurar los errores de mi aplicación? , hay muchas preguntas que indican que su aplicación se ha bloqueado, sin más detalles. Esta pregunta tiene como objetivo instruir a los programadores novatos de Android sobre cómo tratar de solucionar sus propios problemas, o hacer las preguntas correctas.




Answer 1 nhaarman


Esta respuesta describe el proceso de recuperar el seguimiento de la pila. ¿Ya tienes el rastro de la pila? Lea sobre los seguimientos de la pila en " ¿Qué es un seguimiento de la pila y cómo puedo usarlo para depurar los errores de mi aplicación? "

El problema

Su aplicación se cerró porque se lanzó una RuntimeException no capturada .
El más común de estos es la NullPointerException .

¿Cómo resolverlo?

Cada vez que una aplicación de Android falla (o cualquier aplicación de Java), se escribe un Stack trace en la consola (en este caso, logcat). Este seguimiento de la pila contiene información vital para resolver su problema.

Estudio de Android

Finding the stack trace in Android Studio

En la barra inferior de la ventana, haga clic en el botón Logcat . Alternativamente, puedes presionaralt+6. Asegúrese de que su emulador o dispositivo esté seleccionado en el panel Devices . A continuación, intente encontrar el seguimiento de la pila, que se muestra en rojo. Es posible que haya muchas cosas registradas en logcat, por lo que es posible que deba desplazarse un poco. Una manera fácil de encontrar el seguimiento de la pila es borrar el logcat (usando la papelera de reciclaje a la derecha) y dejar que la aplicación se bloquee nuevamente.

He encontrado el rastro de la pila,¿y ahora qué?

Yay! Estás a medio camino de resolver tu problema.
Sólo tienes que averiguar qué fue lo que hizo que tu aplicación fallara,analizando el rastro de la pila.

Lea sobre los seguimientos de la pila en " ¿Qué es un seguimiento de la pila y cómo puedo usarlo para depurar los errores de mi aplicación? "

¡Todavía no puedo resolver mi problema!

Si ha encontrado su Exception y la línea donde ocurrió, y aún no puede encontrar la manera de solucionarla, no dude en hacer una pregunta en StackOverflow.

Intente ser lo más conciso posible: publique el seguimiento de la pila y el código relevante (por ejemplo, unas pocas líneas hasta la línea que arrojó la Exception ).




Answer 2 Vlad Bezden


Puede usar la herramienta ADB de Google para obtener el Logcat file para analizar el problema.

adb logcat > logcat.txt

abra el archivo logcat.txt y busque el nombre de su aplicación. Debe haber información sobre por qué falló, el número de línea, el nombre de la clase, etc.




Answer 3 Hiren Vaghela


Primero, verifica qué punto se ha bloqueado su aplicación ( Unfortunately, MyApp has stopped. ). Para esto, puede usar Log.e("TAG", "Message"); , usando esta línea puedes ver el registro de tu aplicación en logcat.

Después de eso,encuentras el punto en el que tu aplicación se ha detenido es muy fácil de resolver a tu lado.




Answer 4 Rahil Ali


Sólo comprueba el error en el gato de registro.

Tienes la opción del gato de tronco en el eclipse:

ventana-> mostrar vista-> otros-> Android-> Logcat

El gato de registro contiene un error.

Por otra parte,también puede comprobar el error ejecutando una aplicación en modo de depuración.En primer lugar,establezca el punto de interrupción después de eso haciendo:

haga clic derecho en proyecto-> depurar como-> aplicación de Android




Answer 5 Ab_


Nota: Esta respuesta está usando Android Studio 2.2.2

Nota 2: estoy considerando que su dispositivo está conectado correctamente.


Lo primero que haces cuando la aplicación se bloquea es mirar en el LogCat,en la parte inferior de Android Studio hay una barra de herramientas con una lista de menús:

image

Haz clic en el "Monitor de Androides" (El que subrayé en la imagen de arriba.^)

Ahora,tendrás algo como esto:

image

Cambia " Verbose " a " Error ". Ahora solo te mostrará los errores registrados. No se preocupe por todos estos errores (si los tiene) ahora.

image

Okay. Ahora, haz lo que hiciste para bloquear tu aplicación. Después de que su aplicación falla, vaya a su logcat. Debería encontrar un nuevo registro de bloqueo que tenga mucho at:x.x.x : y Caused by: TrumpIsPresidentException por ejemplo. Vaya a eso Caused by: declaración en su logcat.

image

Al lado de que Caused By: , no debe ser la excepción que ocurrió. En mi caso, es una RuntimeException y debajo de ella debe haber una línea que contenga un enlace azul como:

image

Si eso Caused by: NO TIENE una línea con un texto azul en algún lugar debajo de él, busque otro Caused by: eso sí.

Haga clic en ese enlace azul . Debería llevarte a donde ocurrió el problema. En mi caso, se debió a esta línea:

throw new RuntimeException();

Entonces, ahora sé por qué está fallando. Es porque estoy lanzando la excepción yo mismo. Este fue un error obvio .


Sin embargo,digamos que tengo otro error:

java.lang.NullPointerException

Revisé mi logcat,hice clic en el enlace azul que me dio,y me llevó hasta aquí:

mTextView.setText(myString);

Entonces, ahora quiero depurar. De acuerdo con esta pregunta de StackOverflow , una excepción NullPointerException dice que algo es null .

Entonces, descubramos qué es nulo . Hay dos posibilidades O bien mTextView es nulo o myString es nulo. Para averiguarlo, antes de la línea mTextView.setText(mString) , agrego estas dos líneas:

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

Ahora,como hicimos anteriormente (Cambiamos Verose a Error),queremos cambiar "Error" por "Debug".Ya que estamos registrando por medio de la depuración.Aquí están todos los 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

Entonces, desde que usamos Log.d , estamos revisando Debug. Por eso lo cambiamos a depurar.

Notice Log.d tiene un primer parámetro, en nuestro caso "AppDebug". Haga clic en el menú desplegable "Sin filtros" en la esquina superior derecha de logcat. Seleccione "Editar configuración de filtro", asigne un nombre a su filtro y en "Etiqueta de registro" coloque "Depuración de aplicación". Haga clic en Aceptar". Ahora, debería ver dos líneas en el logcat:

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

Así que ahora sabemos que mTextView es nulo.

Observo mi código,ahora me doy cuenta de algo.

Tengo private TextView mTextView declarado en la parte superior de mi clase. Pero no lo estoy definiendo.

Básicamente olvidé hacer esto en mi onCreate():

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

Por eso, mTextView es nulo, porque olvidé decirle a mi aplicación de qué se trata. Entonces agrego esa línea, ejecuto mi aplicación, y ahora la aplicación no se bloquea.