¿Cómo puedo saber si existen extras de Intent en Android?
Tengo este código que comprueba el valor de un extra en un intento de una actividad que se llama desde muchos lugares de mi aplicación:
getIntent().getExtras().getBoolean("isNewItem")
Si isNewItem no está establecido, mi código se bloqueará? ¿Hay alguna manera de saber si se ha configurado o no antes de que lo llame?
- Plaza en blanco en Google Maps
- Borrar la actividad de la pila en el botón Atrás presionado
- Cómo borrar la memoria del montón de eclipse
- No se puede resolver el símbolo 'IOUtils'
- Vista superficial en capas en un FrameLayout en Android
¿Cuál es la manera correcta de manejar esto?
- Asignación de un JSONObject a una lista con Flexjson en Java / Android
- Java, Android, Java EE
- JAVAH no puede encontrar clase (android ndk)
- Primavera RestTemplate HTTP Post con parámetros causa error 400 solicitud incorrecta
- ¿Es posible enviar un evento de un hilo a una actividad?
- GetParcelableArrayList devuelve null
- import javax.xml.transform no se puede resolver
- Error en la instrumentación Android: error de aserción
Como otros han dicho, getIntent()
y getExtras()
pueden devolver null. Debido a esto, no desea encadenar las llamadas, de lo contrario podría terminar llamando a null.getBoolean("isNewItem");
Que lanzará una NullPointerException
y hará que su aplicación se bloquee.
Aquí es cómo haría esto. Creo que está formateado de la mejor manera y es muy fácil de entender por alguien que podría estar leyendo su código.
// You can be pretty confident that the intent will not be null here. Intent intent = getIntent(); // Get the extras (if there are any) Bundle extras = intent.getExtras(); if (extras != null) { if (extras.containsKey("isNewItem")) { boolean isNew = extras.getBoolean("isNewItem", false); // TODO: Do something with the value of isNew. } }
En realidad, no necesita la llamada a hasExtra("isNewItem")
como getBoolean("isNewItem", false)
devolverá false si el extra no existe. Usted podría condensar lo anterior a algo como esto:
Bundle extras = getIntent().getExtras(); if (extras != null) { boolean isNew = extras.getBoolean("isNewItem", false); if (isNew) { // Do something } else { // Do something else } }
También puede utilizar los métodos de Intent
para acceder a sus extras directamente. Esta es probablemente la manera más limpia de hacerlo:
boolean isNew = getIntent().getBooleanExtra("isNewItem", false);
Realmente cualquiera de los métodos aquí son aceptables. Escoja uno que tenga sentido para usted y lo haga de esa manera.
El problema no es getBoolean()
sino getIntent().getExtras()
Prueba de esta manera:
if(getIntent() != null && getIntent().getExtras() != null) myBoolean = getIntent().getExtras().getBoolean("isNewItem");
Por cierto, si isNewItem
no existe, devuelve el defecto vaule false
.
Saludos.
Puedes hacerlo:
Intent intent = getIntent(); if(intent.hasExtra("isNewItem")) { intent.getExtras().getBoolean("isNewItem"); }
getIntent()
devolverá null
si no hay Intent
para usarlo …
boolean isNewItem = false; Intent i = getIntent(); if (i != null) isNewItem = i.getBooleanExtra("isNewItem", false);
No se bloqueará hasta que no lo use! No tienes que conseguirlo si existe, pero si intentas, por alguna razón, usar un "extra" que no existe, tu sistema se bloqueará.
Por lo tanto, trate de hacer algo como:
final Bundle bundle = getIntent().getExtras(); boolean myBool=false; if(bundle != null) { myBool = bundle.getBoolean("isNewItem"); }
De esta forma, asegúrate de que tu aplicación no se bloquee. (Y asegúrese de tener una Intent
válida :))
- Utilizando un color personalizado para el fondo del botón mientras se utiliza el atributo selectableItemBackground
- Tema XML de Android que hereda de dos temas principales?