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


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

Desafortunadamente, MyApp se ha detenido.

¿Qué puedo hacer para resolver esto?


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

Author: naXa, 2014-04-29

16 answers

Esta respuesta describe el proceso de recuperar el seguimiento de la pila. ¿Ya tienes el rastro de la pila? Lea sobre seguimiento 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 solicitud se cerró porque se lanzó un RuntimeException no capturado.
El más común de estos es el NullPointerException.

Cómo resolverlo?

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

Android Studio

Encontrar el seguimiento de la pila en Android Studio

En la barra inferior de la ventana, haga clic en el botón Logcat. Como alternativa, puede pulsar alt+6. Asegúrese de que su emulador o dispositivo está seleccionado en el panel Devices. A continuación, intente encontrar el rastro de pila, que se muestra en rojo. Puede haber muchas cosas registradas en logcat, así que es posible que tenga que 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 de nuevo.

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

Yay! Estás a medio camino de resolver tu problema.
Solo necesita averiguar qué hizo exactamente que su aplicación se bloquee, analizando el seguimiento de la pila.

Lea sobre las trazas de pila en "Qué es una traza de pila y cómo puedo usarla para depurar mi aplicación errores?"

Todavía no puedo resolver mi problema!

Si ha encontrado su Exception y la línea donde ocurrió, y todavía no puede averiguar cómo solucionarlo, no dude en hacer una pregunta en StackOverflow.

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

 594
Author: nhaarman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-12 13:45:14

Puede usar La herramienta ADB de Google para obtener 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.

 82
Author: Vlad Bezden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-21 21:04:48

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

Después de que usted encuentra que el punto de su aplicación se ha detenido es muy fácil de resolver a su lado.

 24
Author: Hiren Vaghela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-14 04:13:27

Simplemente compruebe el error en log cat.

Obtienes la opción de registro cat en eclipse:

Ventana- > mostrar vista - > otros - > Android - > Logcat

El cat de registro contiene un error.

De lo contrario, también puede verificar el error ejecutando una aplicación en modo de depuración. En primer lugar establecer el punto de interrupción después de eso haciendo:

Haga clic derecho en proyecto - >depurar como - > Aplicación Android

 19
Author: Rahil Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-21 01:18:02

Nota: Esta respuesta está utilizando Android Studio 2.2.2

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


Lo primero que haces cuando tu 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:

imagen

Haga clic en el "Android Monitor" (el que subrayé en la imagen de arriba. ^)

Ahora, obtendrás algo como esto: {[29]]}

imagen

Cambie "Verbose" a "Error" Ahora solo le mostrará los errores registrados. No te preocupes por todos estos errores (si los tienes) ahora.

imagen

Ok. Ahora, haz lo que hiciste para bloquear tu aplicación. Después de que tu aplicación se bloquee, ve a tu logcat. Debería encontrar un nuevo registro de bloqueos que tenga muchos at:x.x.x: y Caused by: TrumpIsPresidentException por ejemplo. Vaya a esa declaración Caused by: en su logcat.

imagen

Junto a que Caused By:, debería haber la Excepción que sucedió. En mi caso, es un RuntimeException y debajo de él debe haber una línea que contenga un enlace azul como:

imagen

Si eso Caused by: NO tiene una línea con un texto azul en algún lugar debajo de ella, luego busque otra Caused by: que 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();

Así que, ahora sé por qué se está estrellando. Es porque yo mismo estoy lanzando la excepción. Esto 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ó 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, averigüemos qué es null. Hay dos posibilidades. O mTextView es nulo, o myString es nulo. Para averiguarlo, antes de la línea mTextView.setText(mString), añado 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" a "Debug". Ya que estamos registrando por 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

Así que, ya que usamos Log.d, estamos comprobando la depuración. 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 parte superior derecha del logcat. Seleccione "Editar configuración del filtro", asigne un nombre a su filtro y, en" Etiqueta de registro", ponga"Depuración de aplicaciones". 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 null.

Observo mi código, ahora noto algo.

He private TextView mTextView declarado en la parte superior de mi clase. Pero no lo soy. definirlo.

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 lo que es. Así que agrego esa línea, corro mi aplicación, y ahora la aplicación no se bloquea.


 17
Author: Ab_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:45

Esta ventana emergente solo se muestra 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 todavía está desarrollando la aplicación en Android Studio, que es una forma rápida de leer stack trace y verificar la causa de la aplicación.

Si tu aplicación ya está activa, entonces no puedes usar logcat. Por lo tanto, para eso puede implementar Crashlytics para proporcionarle informes de errores de cualquier excepción que ocurra.

 11
Author: Ani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-04 04:38:18

Revise su mensaje Logcat y vea su archivo Manifest. Debería faltar algo como definir el permiso de usuario Activity,', etc.

 9
Author: Manoj ahirwar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-15 12:35:55

Puede utilizar cualquiera de estas herramientas:

  1. Adb logcat

  2. Adb logcat > registros.txt (puede usar editores para abrir y buscar errores.)

  3. Eclipse logcat (Si no está visible en eclipse, vaya a Windows->Mostrar Vista->Otros->Android->LogCat)

  4. Android Debug Monitor o Android Device Monitor (escriba command monitor o open through UI)

introduzca la descripción de la imagen aquí

  1. Android Studio

Sugiero usar Android Debug Monitor, es bueno. Porque eclipse se cuelga cuando hay demasiados registros, y a través del filtro adb logcat y todo difícil.

 8
Author: ShivBuyya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-07 10:38:02

Tienes que comprobar el Stack trace

¿Cómo hacer eso?

En Su IDE Compruebe el formulario de Windows LOGCAT

Si no puede ver las ventanas logcat, vaya a esta ruta y ábrala

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

Si está utilizando Google-Api vaya a esta ruta

adb logcat > logcat.txt

 6
Author: alireza amini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-13 08:37:51

Permítanme compartir un análisis básico de Logcat para cuando se encuentra con una Fuerza de cierre (cuando la aplicación deja de funcionar).

DOCS

La herramienta básica de Android para recopilar/analizar registros es el logcat.

AQUÍ es la página de Android sobre logcat

Si usas android Studio, también puedes comprobar este ENLACE .

Capturando

Básicamente, puede capturar manualmente logcat con el siguiente comando (o simplemente verificar AndroidMonitor ventana en AndroidStudio):

adb logcat

Hay muchos parámetros que puede agregar al comando que le ayuda a filtrar y mostrar el mensaje que desea... Esto es personal... Siempre uso el comando a continuación para obtener la marca de tiempo del mensaje:

adb logcat -v time

Puede redirigir la salida a un archivo y analizarla en un Editor de texto.

Analizando

Si la aplicación se bloquea, obtendrá 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 del registro muestra usted un montón de información:

  • Cuando ocurrió el problema: 07-09 08:29:13.475

Es importante verificar cuándo ocurrió el problema... Puede encontrar varios errores en un registro... usted debe estar seguro de que usted está comprobando los mensajes apropiados:)

  • Qué aplicación se bloqueó: com.example.khan.abc

De esta manera, sabe qué aplicación se bloqueó (para asegurarse de que está revisando los registros de su mensaje)

  • Que ERROR: java.lang.NullPointerException

Un Puntero NULO Error de excepción

  • Información detallada sobre el error: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

Ha intentado llamar a method onBackPressed() desde un objeto FragmentActivity. Sin embargo, ese objeto era null cuando lo hiciste.

  • Seguimiento de pila: Seguimiento de pila muestra el orden de invocación del método... A veces, el error ocurre en el método que llama (y no en el método llamado).

    En com.ejemplo.Kan.abc.AudioFragment 1 1.onClick (AudioFragment.java:125)

Ha ocurrido un error en el archivo com.example.khan.abc.AudioFragment.java, dentro del método onClick() en la línea: 125 (stacktrace muestra la línea en la que ocurrió el error)

Fue llamado por:

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

Que fue llamado por:

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

Que fue llamado por:

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

Etc....

Sinopsis

Esto fue solo una visión general... No todos los registros son simples, etc... Es solo para compartir la idea y proporcionar una información de nivel de entrada para usted...

Espero poder ayudarte de alguna manera... Regards

 5
Author: W0rmH0le,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-14 03:21:35

En el siguiente método showToast() debe pasar otro parámetro para el contexto o el contexto de la aplicación al hacerlo, puede probarlo.

  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
Author: Mayank Nema,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-24 14:48:13

Usa el LogCat e intenta encontrar lo que está causando que la aplicación se bloquee.

Para ver Logcat si usas Android Studio entonces presiona ALT + 6 o

Si usas Eclipse entonces Ventana - > Perspectiva abierta - > Otro-LogCat

Vaya al LogCat, desde el menú desplegable seleccione error. Esto contendrá toda la información requerida para ayudarlo a depurar. Si eso no ayuda, publica el LogCat como una edición a tu pregunta y alguien te ayudará fuera.

 4
Author: Biswajit Karmakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-15 07:45:20

Si su aplicación por alguna razón se bloquea sin una buena stacktrace. Intente depurar desde la primera línea, y vaya línea por línea hasta que se bloquee. Entonces tendrás respuesta, qué línea te está causando problemas. Proably usted podría entonces envolver en try catch bloque e imprimir salida de error.

 2
Author: felislynx.silae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-02 15:07:36

También puede obtener este mensaje de error por sí solo, sin ningún rastro de pila ni ningún mensaje de error adicional.

En este caso, debe asegurarse de que su manifiesto de Android esté configurado correctamente (incluida cualquier fusión de manifiestos que ocurra desde una biblioteca y cualquier actividad que provenga de una biblioteca), y prestar especial atención a la primera actividad que se muestre en su aplicación en sus archivos de manifiesto.

 1
Author: Pelpotronic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-22 08:50:58

Crash durante el desarrollo

Intente logview-0.20 para obtener los registros y analizarlos durante el desarrollo.
Asegúrese de marcar ./logview y ./lib/logview.jar como ejecutables cuando se ejecute en Linux.

Si no te gusta, hay un montón de alternativas visores de registro de escritorio para Android.

Crash in the wild

Integrar una herramienta de informes de fallos en tiempo real como Firebase Crashlytics con el fin de obtener stacktraces de excepciones no controladas que ocurrieron en dispositivos de los usuarios.

Lee Cómo lanzar una Aplicación con Errores (Y Vive para Contar la Historia) para saber más sobre el manejo de errores en el campo.

 0
Author: naXa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-11 08:41:15

La gente comete errores, y por lo tanto la codificación también.

Cuando alguna vez sucedió cualquier error, siempre verifique con el logcat con el texto en color rojo, sin embargo, u puede encontrar el problema real en el texto de color azul con subrayado en esos textos de color rojo.

Asegúrese de que si u crea un nuevo activity, siempre declare el activity en el archivo AndroidManifest.

Si agrega permiso, declararlo en el archivo AndroidMainifest también.

 -1
Author: Kopi Bryant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-20 07:15:19