java - errores - la aplicacion dejo de funcionar android studio




Desafortunadamente MyApp se ha detenido. ¿Como puedo resolver esto? (11)

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.

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.


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

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 .


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


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.


Puedes usar cualquiera de estas herramientas:

  1. adb logcat

  2. adb logcat> logs.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 el comando command monitor o abra a través de la interfaz de usuario)

  1. Android Studio

Sugiero usar Android Debug Monitor , es bueno. Porque eclipse se cuelga cuando hay demasiados registros, y mediante el filtro logcat adb, todo es difícil.


Si tu aplicación por alguna razón falla sin un buen stacktrace. Intente depurarlo 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. Probablemente podría envolverlo en el bloque try catch e imprimir la salida del error.


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


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á.


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.





crash