java la - Desafortunadamente MyApp se ha detenido.¿Como puedo resolver esto?




aplicacion dejo (14)

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 problemas por sí mismos, o hacer las preguntas correctas.


Answers

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

Cuando ocurra un error , siempre verifique con el logcat con el texto en color rojo, sin embargo, puede descubrir el problema real en el texto de color azul con subrayado en el texto de color rojo.

Asegúrese de que si crea una nueva activity , siempre declare la activity en el archivo AndroidManifest .

Si agrega Permiso, declare también en el archivo de AndroidMainifest .


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

adb logcat > logcat.txt

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


Nota: esta respuesta está utilizando 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 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 mostrará los errores registrados. No te preocupes por todos estos errores (si los tienes) ahora.

De acuerdo. 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 Caused by: TrumpIsPresidentException que tenga un montón de at:xxx : y Caused by: TrumpIsPresidentException por ejemplo. Vaya a la Caused by: en su logcat.

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

Si eso es Caused by: NO TIENE una línea con un texto azul en algún lugar debajo de él, entonces 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é se está estrellando. Es porque yo mismo estoy lanzando la excepción. 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ó aquí:

mTextView.setText(myString);

Entonces, ahora quiero depurar. De acuerdo con NullPointerException , una NullPointerException dice que algo es null .

Entonces, averigüemos 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" 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

Entonces, como usamos Log.d , estamos revisando Debug. Es por eso que lo cambiamos para depurar.

Aviso 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 de filtro", asigne un nombre a su filtro y en "Etiqueta de registro" ponga "Depuración de aplicación". Haga clic en Aceptar". Ahora, deberías 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 noto 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 es que mTextView es nulo, porque olvidé decirle a mi aplicación qué es. Así que agrego esa línea, ejecuto mi aplicación y ahora la aplicación no falla.


En el método showToast (), a continuación, debe pasar otro parámetro para el contexto o el contexto de la aplicación; para ello, puede intentarlo.

  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();
}

Esta respuesta describe el proceso de recuperación del seguimiento de la pila. ¿Ya tienes el rastro de pila? Lea sobre las trazas de pila en " ¿Qué es una traza de pila, y cómo puedo usarla para depurar los errores de mi aplicación? "

El problema

Su aplicación se cerró porque se lanzó una excepción RuntimeException .
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 pila contiene información vital para resolver su problema.

Android Studio

En la barra inferior de la ventana, haga clic en el botón Logcat . Alternativamente, puede presionar alt + 6 . Asegúrese de que su emulador o dispositivo esté seleccionado en el panel Devices . A continuación, intente encontrar la traza de 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 forma 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 vuelva a fallar.

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

¡Hurra! Estás a medio camino de resolver tu problema.
Solo necesita averiguar qué fue lo que hizo que su aplicación fallara exactamente, 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 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 resolverlo, no dude en hacer una pregunta en .

Trate de 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 lanzó la Exception ).


También puede obtener este mensaje de error por sí solo, sin ningún seguimiento de pila o cualquier 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 suceda de 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. .


Primero verifique en qué punto se bloqueó su aplicación ( Unfortunately, MyApp has stopped. ). Para esto puedes usar Log.e("TAG","Message"); , usando esta línea puedes ver tu aplicación iniciar sesión en logcat.

Después de que encuentre qué punto ha dejado su aplicación, es muy fácil de resolver a su lado.


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 muchos visores de registro de escritorio alternativos para Android .

Choque en la naturaleza

Integre una herramienta de informes de fallos en tiempo real como Firebase Crashlytics para obtener pilas de excepciones no manejadas que ocurrieron en los dispositivos de los usuarios.

Lea Cómo lanzar una aplicación de Buggy (y Live to Tell the Tale) para saber más sobre el manejo de errores en el campo.


Use el LogCat e intente encontrar qué está causando que la aplicación se bloquee.

Para ver Logcat si usa Android Studio, presione ALT + 6 o

Si usa Eclipse, entonces Ventana -> Abrir perspectiva -> Otro - LogCat

Vaya a LogCat, desde el menú desplegable seleccione el error. Esto contendrá toda la información requerida para ayudarte a depurar. Si eso no ayuda, publique el LogCat como una edición para su pregunta y alguien lo ayudará.


Permítame compartir un análisis Logcat básico para cuando cumpla con un cierre de fuerza (cuando la aplicación deja de funcionar).

DOCS

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

HERE está la página de Android sobre logcat

Si usas Android Studio, también puedes consultar este LINK .

Capturando

Básicamente, MANUALMENTE puede capturar logcat con el siguiente comando (o simplemente revisar la ventana de AndroidMonitor en AndroidStudio):

adb logcat

Hay muchos parámetros que puedes agregar al comando que te ayudan a filtrar y mostrar el mensaje que deseas ... 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 tu aplicación se bloquea, obtendrás 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 mucha 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 ... debe asegurarse de que está verificando los mensajes correctos :)

  • Que aplicación se com.example.khan.abc : com.example.khan.abc

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

  • Qué ERROR: java.lang.NullPointerException

Un error de excepción de puntero nulo

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

onBackPressed() llamar al método onBackPressed() desde un objeto FragmentActivity . Sin embargo, ese objeto era null cuando lo hiciste.

  • Stack Trace: Stack Trace 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 del método onClick() en la línea: 125 (stacktrace muestra la línea en 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 ....

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


Solo revisa el error en log cat.

Obtienes la opción log cat en eclipse:

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

El gato del registro contiene error.

De otra manera, también puede verificar el error ejecutando una aplicación en modo de depuración. Primero establece el punto de ruptura después de eso haciendo:

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


Tienes que comprobar la Stack trace

¿Como 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ás utilizando Google-Api ve a este camino

adb logcat> logcat.txt


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


int foo=Integer.parseInt("1234");

Asegúrese de que no haya datos no numéricos en la cadena.





java android debugging kotlin crash