android - Diferencia entre getExtras(name).getString y getIntent(). GetStringExtra(name)
android-intent nullpointerexception (3)
Tengo algunos informes de errores en mi aplicación de Android, es una excepción de Nullpointe en onCreate () en una actividad. El código que falla es getIntent (). GetExtras (). GetStringExtra ("nombre"). (Excepción de puntero nulo)
Eso significa que getExtras () es nulo de alguna manera. Estoy seguro de que estoy estableciendo el intento adicional en cada lugar en el que estoy creando el intento. No puedo volver a crearlo en mi emulador en el dispositivo. Creo que sucedió en mi dispositivo real (pero no mientras estaba depurando) después de que intenté abrir la aplicación de nuevo, mientras tanto, Android probablemente mató el proceso y recreó la actividad nuevamente. Pero, ¿no deberían ser los extras de intención mantenidos incluso en este escenario?
Intenté matar el proceso en el emulador, onCreate se llamó nuevamente y getExtras () devolvió el valor correcto.
Reemplacé el código con getIntent (). GetStringExtra (). ¿Cuál es la diferencia, además de que no arrojará una excepción de nullpointerex, pero seguirá configurando el String como nulo. ¿Hay alguna otra diferencia?
¿Qué podría estar causando eso?
Intent.getStringExtra () devuelve nulo si no hay extras. Intent.getExtras () devuelve null si no hay extras, por lo que debe verificarlo antes de intentar llamar a getString () u otros métodos en él.
getIntent.getExtras () devuelve nulo en algún momento. getIntent (). getStringExtra () probablemente esté codificado para comprobar los extras nulos y para devolver nulo si getExtras () es nulo. La llamada arquitectura "sin tiros". Si es así, esta es una ejecución en tiempo de ejecución válida y no arrojaría una excepción. llamar a getStringExtra en un null extras no es una ejecución de tiempo de ejecución válida y debe lanzar una excepción.
Parece que HAY una ruta en la que getExtras () es nulo, por lo que puede codificar esto comprobando si hay extras nulos.
Descubrí que en algún otro lugar de mi código estaba creando intentos de acceso directo que tenían un String [] extra. Android HOME (y tal vez otras partes del sistema) no persisten matrices de cadenas, solo extras primitivos (int, string, long, float ...). Pero el código que causaba problemas no usa atajos, solo es una actividad simple que recibe una matriz de cadenas adicional. Quizás los extras vacíos también fueron causados por este problema: el sistema operativo mató la aplicación y los extras no pudieron almacenarse. En este caso, Android no lanza ninguna excepción.
Descrito por Romain Guy aquí: http://groups.google.com/group/android-developers/browse_thread/thread/7f2ce458bd5d112f/189e2b7b2b2532d7
Hice una pregunta más específica sobre esto aquí: los extras de intento de acceso directo perdieron después del reinicio?