Je suis l'exemple de livre Android:
//Get the drink from the intent
int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
Drink drink = Drink.drinks[drinkIdd];
Et ce projet pourrait être exécuté dans Android Studio mais avec un avertissement jaune en ligne:
int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
avec:
info: Unboxing of '(Integer)getIntent().getExtras().get(EXTRA_DRINKID)' may produce 'Java.lang.NullPointerException'
D'après ma compréhension, get(EXTRA_DRINKID)
retourne un objet, et (Integer) le convertit en type int pour rencontrer int drinkIdd
.
Et pourrais-je écrire la ligne supérieure comme ça? Utiliser () pour envelopper getIntent (). GetExtras (). Get () dans son ensemble car il retourne finalement un objet, puis le convertit en int.
int drinkIdd = (Integer)(getIntent().getExtras().get(EXTRA_DRINKID));
En effet, lors de l'appel du code suivant:
getIntent().getExtras().get(EXTRA_DRINKID);
L'objet renvoyé peut être nul.
Lorsque vous transtypez la valeur avec Integer, il ne se plaindra pas, car vous pouvez convertir Null en entier.
Mais lorsque vous appelez ce qui suit:
int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
car lorsque vous déballez, il se plaindra car vous ne pouvez pas déballer une valeur null .
Il vaut mieux utiliser getInt()
au lieu de get()
comme ceci:
int drinkIdd = getIntent().getExtras().getInt(EXTRA_DRINKID);
Ainsi, vous ne recevez plus d'avertissement et rendez votre code plus robuste.
Je ne sais pas quel livre vous lisez, mais je pense que vous devez changer la référence de votre livre. Il semble que l'auteur du livre n'ait pas compris le concept de base de Java et Android API. Donc, vous devez utiliser un autre Android livre pour votre processus d'apprentissage jusqu'à ce que l'auteur ait terminé son travail;)
Remarque:
La conversion d'un objet d'un type wrapper (Integer) en sa valeur primitive (int) correspondante est appelée unboxing. En savoir plus sur Autoboxing et Unboxing .