J'ai ce code qui vérifie la valeur d'un extra dans une intention sur une activité qui est appelée à partir de nombreux endroits dans mon application:
getIntent().getExtras().getBoolean("isNewItem")
Si isNewItem n'est pas défini, mon code se bloquera-t-il? Existe-t-il un moyen de savoir s'il a été défini ou non avant de l'appeler?
Quelle est la bonne façon de gérer cela?
Comme d'autres l'ont dit, getIntent()
et getExtras()
peuvent retourner null. Pour cette raison, vous ne voulez pas enchaîner les appels ensemble, sinon vous pourriez finir par appeler null.getBoolean("isNewItem");
qui lèvera un NullPointerException
et provoquera le plantage de votre application.
Voici comment j'accomplirais cela. Je pense qu'il est formaté de la manière la plus agréable et est très facilement compris par quelqu'un d'autre qui pourrait lire votre code.
// 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 pouvez 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 façon la plus propre de le faire:
boolean isNew = getIntent().getBooleanExtra("isNewItem", false);
Vraiment, toutes les méthodes ici sont acceptables. Choisissez-en un qui vous convient et faites-le de cette façon.
Tu peux le faire:
Intent intent = getIntent();
if(intent.hasExtra("isNewItem")) {
intent.getExtras().getBoolean("isNewItem");
}
Le problème n'est pas la getBoolean()
mais la getIntent().getExtras()
Testez de cette façon:
if(getIntent() != null && getIntent().getExtras() != null)
myBoolean = getIntent().getExtras().getBoolean("isNewItem");
soit dit en passant, si isNewItem
n'existe pas, il retourne le vaule par défaut false
.
Cordialement.
getIntent()
renverra null
s'il n'y a pas Intent
alors utilisez ...
boolean isNewItem = false;
Intent i = getIntent();
if (i != null)
isNewItem = i.getBooleanExtra("isNewItem", false);
Il ne plantera pas tant que vous ne l'utiliserez pas! Vous n'avez pas besoin de 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 un Intent
:) valide)