Estoy desarrollando una aplicación, y cada vez que la ejecuto, recibo el mensaje:
Lamentablemente, 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 intentar solucionar sus problemas por sí mismos, o hacer las preguntas correctas.
Respuestas:
Esta respuesta describe el proceso de recuperación del seguimiento de la pila. ¿Ya tienes el rastro de la pila? Lea sobre los seguimientos de pila en " ¿Qué es un seguimiento de pila y cómo puedo usarlo para depurar los errores de mi aplicación? "
El problema
Su aplicación se cerró porque
RuntimeException
se arrojó una captura .El más común de estos es el
NullPointerException
.¿Cómo resolverlo?
Cada vez que se bloquea una aplicación de Android (o cualquier aplicación de Java),
Stack trace
se escribe a en la consola (en este caso, logcat). Este seguimiento de la pila contiene información vital para resolver su problema.Android Studio
En la barra inferior de la ventana, haga clic en el
Logcat
botón. Alternativamente, puede presionar alt+ 6. Asegúrese de que su emulador o dispositivo esté seleccionado en elDevices
panel. 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é?
¡Hurra! Estás a medio camino de resolver tu problema.
Solo necesita averiguar qué hizo exactamente que su aplicación se bloqueara, analizando el seguimiento de la pila.
Lea sobre los seguimientos de pila en " ¿Qué es un seguimiento de 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 todavía no puede encontrar la manera de solucionarlo, no dude en hacer una pregunta en StackOverflow.Trate de ser lo más conciso posible: publique el seguimiento de la pila y el código relevante (por ejemplo, algunas líneas hasta la línea que arrojó el
Exception
).fuente
Android > Devices|Logcat
y agregar un nuevo filtro ( i.imgur.com/145dtkx.png ), y filtrarloby Log Message
aquí, puede ponerFATAL EXCEPTION
( i.imgur.com/HpELhaU .png ) para que en este cuadro pueda leer todos losExceptions
que arroja su aplicación. Con esto no necesita borrar logcat y hacer el bloqueo nuevamente. Creo que Android Studio también tiene esta opción.Puede utilizar la herramienta ADB de Google para obtener
Logcat file
para analizar el tema.abra el
logcat.txt
archivo 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.fuente
-d
, de lo contrario, deberá presionar ctrl-C para salir de logcat. Yo síadb logcat -v time -d > filename.txt
Primero, verifica en qué punto se ha bloqueado su aplicación (
Unfortunately, MyApp has stopped.
). Para esto, puede usarLog.e("TAG", "Message");
, usando esta línea puede ver el registro de su aplicación en logcat.Después de eso, descubre qué punto se ha detenido su aplicación es muy fácil de resolver a su lado.
fuente
Simplemente verifique el error en log cat.
Obtiene la opción log cat de eclipse:
Log cat contiene error.
De lo contrario, también puede verificar el error ejecutando una aplicación en modo de depuración. Primero establezca el punto de interrupción después de eso haciendo:
fuente
Nota: Esta respuesta está usando Android Studio 2.2.2
Nota 2: estoy considerando que su dispositivo está conectado correctamente.
Lo primero que hace cuando su aplicación falla es mirar en LogCat, en la parte inferior de Android Studio hay una barra de herramientas con una lista de menús:
Haga clic en el "Monitor de Android" (El que subrayé en la imagen de arriba. ^)
Ahora, obtendrás algo como esto:
Cambie "
Verbose
" a "Error
" Ahora solo le mostrará los errores registrados. No se preocupe por todos estos errores (si los tiene) ahora.Okay. Ahora, haz lo que hiciste para bloquear tu aplicación. Después de que su aplicación se bloquee, vaya a su logcat. Debería encontrar un nuevo registro de bloqueo que tenga muchos
at:x.x.x
: yCaused by: TrumpIsPresidentException
por ejemplo. Vaya a esaCaused by:
declaración en su logcat.Además de eso
Caused By:
, debería haber la excepción que sucedió. En mi caso, es unaRuntimeException
y debajo de ella debería haber una línea que contenga un enlace azul como:Si eso
Caused by:
NO TIENE una línea con un texto azul en alguna parte debajo de ella, busque otraCaused by:
que sí la tenga .Haga clic en ese enlace azul . Debería llevarte a donde ocurrió el problema. En mi caso, se debió a esta línea:
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 recibí otro error:
Revisé mi logcat, hice clic en el enlace azul que me dio, y me llevó aquí:
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
mTextView
es nulo omyString
es nulo. Para averiguarlo, antes de lamTextView.setText(mString)
línea, agrego estas dos líneas:Ahora, como lo hicimos anteriormente (cambiamos Verose a Error), queremos cambiar "Error" a "Depurar". Ya que estamos iniciando sesión depurando. Aquí están todos los métodos de registro:
Entonces, desde que usamos
Log.d
, estamos revisando la depuración. Por eso lo cambiamos a depurar.El aviso
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 la aplicación". Haga clic en Aceptar". Ahora, debería ver dos líneas en el logcat:Entonces ahora sabemos que mTextView es nulo.
Observo mi código, ahora noto algo.
He
private TextView mTextView
declarado en la parte superior de mi clase. Pero no lo estoy definiendo.Básicamente olvidé hacer esto en mi onCreate ():
Entonces, ESO es por qué
mTextView
es nulo, porque olvidé decirle a mi aplicación qué es. Entonces agrego esa línea, ejecuto mi aplicación, y ahora la aplicación no se bloquea.fuente
Esta ventana emergente se muestra solo cuando obtiene una excepción fatal en su código que detiene la ejecución de la aplicación. Podría ser cualquier excepción
NullPointerException
,OutOfMemoryException
etc.La mejor manera de verificar es a través de Logcat si aún está desarrollando la aplicación en el estudio de Android, que es una forma rápida de leer el seguimiento de la pila y verificar la causa de la aplicación.
Si su aplicación ya está activa, no puede usar logcat . Entonces, para eso puede implementar
Crashlytics
para proporcionarle informes de errores de cualquier excepción que ocurra.fuente
Verifique su
Logcat
mensaje y vea suManifest
archivo. Debería faltar algo como definir elActivity,
permiso del usuario`, etc.fuente
Puede usar cualquiera de estas herramientas:
Sugiero usar Android Debug Monitor , es bueno. Porque el eclipse se cuelga cuando hay demasiados registros, y a través del filtro adb logcat y todo es difícil.
fuente
Tienes que revisar el
Stack trace
¿Como hacer eso?
en su IDE Compruebe el formulario de Windows LOGCAT
Si no puede ver las ventanas de logcat, vaya a esta ruta y ábrala
si está utilizando Google-Api, vaya a esta ruta
adb logcat> logcat.txt
fuente
En el siguiente método showToast (), debe pasar otro parámetro para el contexto o el contexto de la aplicación, de esta manera puede probarlo.
fuente
Permítame compartir un análisis básico de Logcat para cuando encuentre un cierre forzado (cuando la aplicación deje de funcionar).
DOCS
La herramienta básica de Android para recopilar / analizar registros es el logcat.
AQUÍ está la página de Android sobre logcat
Si usa Android Studio, también puede consultar este ENLACE .
Capturar
Básicamente, puede capturar MANUALMENTE logcat con el siguiente comando (o simplemente verificar la ventana de AndroidMonitor en AndroidStudio):
Hay muchos parámetros que puede agregar al comando que lo ayudan a filtrar y mostrar el mensaje que desea ... Esto es personal ... Siempre uso el siguiente comando para obtener la marca de tiempo del mensaje:
Puede redirigir el resultado a un archivo y analizarlo en un Editor de texto.
Analizando
Si su aplicación se bloquea, obtendrá algo como:
Esta parte del registro muestra mucha información:
07-09 08:29:13.475
Es importante verificar cuándo ocurrió el problema ... Puede encontrar varios errores en un registro ... debe estar seguro de que está revisando los mensajes correctos :)
com.example.khan.abc
De esta manera, usted sabe qué aplicación se bloqueó (para asegurarse de que está revisando los registros sobre su mensaje)
java.lang.NullPointerException
Un error de excepción de puntero nulo
Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
Intentaste llamar al método
onBackPressed()
desde unFragmentActivity
objeto. Sin embargo, ese objeto fuenull
cuando lo hiciste.Seguimiento de pila: el seguimiento de pila le muestra el orden de invocación del método ... A veces, el error ocurre en el método de llamada (y no en el método llamado).
en com.example.khan.abc.AudioFragment $ 1.onClick (AudioFragment.java:125)
Se produjo un error en el archivo
com.example.khan.abc.AudioFragment.java
, dentro delonClick()
método en la línea:125
(stacktrace muestra la línea en la que ocurrió el error)Fue llamado por:
Que fue llamado por:
que fue llamado por:
etc ....
Visión general
Esto fue solo una descripción general ... No todos los registros son simples, etc. Es solo para compartir la idea y brindarle información de nivel de entrada ...
Espero poder ayudarte de alguna manera ... Saludos
fuente
Use el LogCat e intente encontrar qué está causando el bloqueo de la aplicación.
Para ver Logcat si utiliza Android Studio y luego Presione ALT + 6 o
si usa Eclipse, luego Ventana -> Abrir perspectiva -> Otro - LogCat
Vaya a LogCat, desde el menú desplegable seleccione error. Esto contendrá toda la información requerida para ayudarlo a depurar. Si eso no ayuda, publique LogCat como una edición a su pregunta y alguien lo ayudará.
fuente
Si su aplicación por alguna razón se bloquea sin un buen stacktrace. Intente depurarlo desde la primera línea y vaya línea por línea hasta el bloqueo. Entonces tendrá respuesta, qué línea le está causando problemas. Probablemente, podría envolverlo en try catch block e imprimir la salida de error.
fuente
También puede obtener este mensaje de error por sí solo, sin ningún seguimiento de pila ni ningún otro mensaje de error.
En este caso, debe asegurarse de que su manifiesto de Android esté configurado correctamente (incluida cualquier fusión de manifiesto que ocurra desde una biblioteca y cualquier actividad que provenga de una biblioteca), y prestar especial atención a la primera actividad que se muestra en su aplicación en sus archivos de manifiesto .
fuente
Choque durante el desarrollo
Pruebe mi vista de registro de herramienta favorita para obtener los registros y analizarlos durante el desarrollo.
Asegúrese de marcar
./logview
y./lib/logview.jar
como ejecutable cuando se ejecuta en Linux.Si no le gusta, hay muchos visores de registro de escritorio alternativos para Android .
Choque en la naturaleza
Integre una herramienta de informe de fallas en tiempo real como Firebase Crashlytics en , para obtener rastros de excepciones no controladas que ocurrieron en los dispositivos de los usuarios.
Lea Cómo liberar una aplicación Buggy (y Live to Tell the Tale) para saber más sobre cómo manejar errores en el campo.
fuente
La gente comete errores, y también la codificación.
Cuando
error
ocurra algo, consulte siempre con el logcat con el texto en color rojo, sin embargo, puede encontrar el problema real en el texto en color azul con subrayado en el texto en color rojo.Asegúrese de crear un nuevo
activity
, siempre declare elactivity
en elAndroidManifest
archivo.Si agrega Permiso, declare también en el
AndroidMainifest
archivo.fuente
Logcat : para verificar los registros en la fase de desarrollo de Android Studio
Inicialmente borre Logcat y deje que la aplicación se bloquee nuevamente para que solo pueda obtener detalles de registro bloqueados. Tienes que verificar el seguimiento de la pila
Error común durante el bloqueo de la aplicación como:
Para resolver el error de bloqueo de la aplicación:
fuente
Primero, debe verificar dónde y por qué su aplicación se ha bloqueado
(Unfortunately, MyApp has stopped.).
Con la ayuda deLOG
, puede averiguar qué salió mal.Después de eso, encuentra qué punto ha detenido su aplicación y corrija eso desde su punto.
fuente
Si no tiene ningún tipo de registro interesante en su terminal (o no están directamente relacionados con su aplicación), tal vez su problema se deba a una biblioteca nativa. En ese caso, debe verificar los archivos "tombstone" dentro de su terminal.
La ubicación predeterminada para los archivos tombstone depende de cada dispositivo, pero si ese es el caso, tendrá un registro que dice:
Tombstone written to: /data/tombstones/tombstone_06
Para obtener más información, consulte https://source.android.com/devices/tech/debug .
fuente
También ejecutar este comando en la terminal puede ayudar a encontrar el problema:
gradlew build > log.txt 2>details.txt
entonces debe ir a la ubicación del archivo gradlew en leer los dos archivos de registro anteriores.
fuente