Bizarre analyser crash android de Tenter d'invoquer la méthode virtuelle 'int java.lang.Entier.intValue()
Donc en gros j'ai tout essayé mais je reçois ce crash. Il se bloque parfois seulement. Voici mon code:
if (mCurrentUser != null && mCurrentUser.containsKey(Constants.TABLE_POINTS)) {
int points = mCurrentUser.getInt(Constants.TABLE_POINTS) + AppSingleton.sPointsLookupMap.get(pointsKey);
mCurrentUser.put(Constants.TABLE_POINTS, points);
mCurrentUser.saveInBackground();
}
Stacktrace:
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
at com.titlesource.ts_foodsource.fragments.KitchenFragment$10.done(KitchenFragment.java:654)
at com.titlesource.ts_foodsource.fragments.KitchenFragment$10.done(KitchenFragment.java:649)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Maintenant, j'ai trouvé que le intValue() est utilisée à l'intérieur de la getInt (), méthode (à l'Intérieur de la ParseObject classe):
public int getInt(String key) {
Number number = this.getNumber(key);
return number == null?0:number.intValue();
}
Pourquoi suis-je de cette exception.
J'ai tout essayé. Ajouté null contrôles et aussi de vérifier que le champ est effectivement présent dans la mCurrentUser objet, mais en vain.
Si en bas à droit de vote de cette question, veuillez laisser un raison.
Une chose est sûre, cette exception n'est pas venu de l'extrait de code vous nous avez montré. Ou au moins pas dans la méthode, peut-être dans le getNumber méthode.
OriginalL'auteur Rohit Ramkumar | 2016-01-15
Vous devez vous connecter pour publier un commentaire.
Vous avez un
Integer
qui est nulle, ce qui vous essayez d'unbox (un simpleint
).Depuis la
getInt(String key)
méthode deParseObject
déjà de vérifier si elle est nulle, l'exception n'est pas le cas.Au lieu de cela, il sera à
AppSingleton.sPointsLookupMap.get(pointsKey)
, si vous essayez d'obtenir un objet à partir de la carte qui n'existe pas.Assurez-vous qu'il existe, ou ajouter de corriger l'erreur de manipulation de cette partie du code.
OriginalL'auteur Daniel Zolnai
Remplacer votre code:
Il devrait résoudre le problème et le code d'Exception-safe 🙂
La première ligne (après le si) a fait quelque chose comme ceci:
points
variablemCurrentUser.getInt(Constants.TABLE_POINTS)
valeurInteger
objet avecAppSingleton.sPointsLookupMap.get(pointsKey)
points
, l'obtention de sa valeur avec.intValue()
appel.Tout ce qui s'est passé derrière les scènes dans une ligne de code et si le résultat
Integer
objet est null, laException
a été levée.OriginalL'auteur Kelevandos
Parfois, il peut se produire lorsque vous passez de tableau de type
Integer
sansfinal
mot-clé à l'anonyme intérieur de la classe (pour OnClickListener dans mon cas).OriginalL'auteur Leo240