Comment savoir si des extras d’intention existent dans Android?

J’ai ce code qui vérifie la valeur d’un supplément dans une Intention sur une activité appelée depuis de nombreux endroits de mon application:

getIntent().getExtras().getBoolean("isNewItem") 

Si isNewItem n’est pas défini, mon code va-t-il tomber en panne? Y a-t-il un moyen de savoir si elle a été définie ou non avant que je l’appelle?

Quelle est la bonne façon de gérer cela?

Comme d’autres l’ont dit, getIntent() et getExtras() peuvent renvoyer null. Pour cette raison, vous ne voulez pas enchaîner les appels, sinon vous pourriez appeler null.getBoolean("isNewItem"); qui lancera une NullPointerException et provoquera le blocage de votre application.

Voici comment j’accomplirais ceci. Je pense que c’est formaté de la manière la plus agréable et que quelqu’un d’autre qui lit votre code peut facilement le comprendre.

 // 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. } } 

Vous n’avez pas réellement besoin de l’appel à containsKey("isNewItem") car getBoolean("isNewItem", false) renverra false si le supplément n’existe pas. Vous pourriez condenser ce qui précède à quelque chose comme ceci:

 Bundle extras = getIntent().getExtras(); if (extras != null) { boolean isNew = extras.getBoolean("isNewItem", false); if (isNew) { // Do something } else { // Do something else } } 

Vous pouvez également utiliser les méthodes Intent pour accéder directement à vos extras. C’est probablement la manière la plus propre de le faire:

 boolean isNew = getIntent().getBooleanExtra("isNewItem", false); 

Vraiment l’une des méthodes ici est acceptable. Choisissez-en un qui a du sens pour vous et le faites de cette façon.

Le problème n’est pas le getBoolean() mais le getIntent().getExtras()

Testez de cette façon:

 if(getIntent() != null && getIntent().getExtras() != null) myBoolean = getIntent().getExtras().getBoolean("isNewItem"); 

au fait, si isNewItem n’existe pas, il retourne de default vaule false .

Cordialement.

Tu peux le faire:

 Intent intent = getIntent(); if(intent.hasExtra("isNewItem")) { intent.getExtras().getBoolean("isNewItem"); } 

getIntent() renverra null s’il n’y a pas d’ Intent donc utilisez …

 boolean isNewItem = false; Intent i = getIntent(); if (i != null) isNewItem = i.getBooleanExtra("isNewItem", false); 

Il ne plantera pas à moins que vous l’utilisiez! Vous n’avez pas à l’obtenir s’il existe, mais si vous essayez, pour une raison quelconque, d’utiliser un “extra” qui n’existe pas, votre système se bloquera.

Alors, essayez de faire quelque chose comme:

 final Bundle bundle = getIntent().getExtras(); boolean myBool=false; if(bundle != null) { myBool = bundle.getBoolean("isNewItem"); } 

De cette façon, vous vous assurez que votre application ne plante pas. (et assurez-vous d’avoir une Intent valide :))