¿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?

¿Cuál es la manera correcta de manejar esto?

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 :))

  • Cómo imprimir el mensaje devuelto de HttpResponse?
  • Ejemplo de navegación con desplazamiento rápido en android?
  • ¿Cuál es el uso de la palabra clave final?
  • Biblioteca no encontrada debido a targetSdkVersion (armeabi-v7a y libcryptopp.so)
  • Cómo enviar texto a través de formularios mediante JSoup
  • Cómo analizar JSONArray en android
  • Error: Error de ejecución para la tarea ': lib: compileReleaseAidl'. > Ejecutor Singleton no iniciado
  • Error de descifrado: "no iv establecido cuando se esperaba"
  • No se pudo encontrar la clase 'android.graphics.drawable.RippleDrawable' Unicode issue?
  • Hacer que el teclado Android resista a los ataques de KeyLogger
  • Código de retorno de API de Cloud = UNAUTHENTICATED, cause = java.io.IOException: Error al obtener el token de acceso para la cuenta de servicio:
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.