J'ai un ContentValues
que j'analyse pour les données. Je viens de recevoir un rapport d'accident très étrange:ContentValues getAsLong NullPointerException
Exception fatale: java.lang.NullPointerException: Tentative d'invoquer méthode virtuelle « à long java.lang.Long.longValue() » sur un objet nul référence
private void populateMeta(final ContentValues values)
{
if (values == null)
return;
Date d = new Date(values.getAsLong(Meta.Data.TIMESTAMP));
...
}
Quand je regarde dans getAsLong
Je ne vois pas comment cela pourrait se produire:
public Long getAsLong(String key) {
Object value = mValues.get(key);
try {
return value != null ? ((Number) value).longValue() : null;
} catch (ClassCastException e) {
if (value instanceof CharSequence) {
try {
return Long.valueOf(value.toString());
} catch (NumberFormatException e2) {
Log.e(TAG, "Cannot parse Long value for " + value + " at key " + key);
return null;
}
} else {
Log.e(TAG, "Cannot cast value for " + key + " to a Long: " + value, e);
return null;
}
}
}
Il devrait juste retourner null si le champ est nul, non?
Mise à jour:
essayé quelques petites choses à recréer cette trace de la pile et à la fin ce rétrécis vers le bas:
values = new ContentValues();
Long timestamp = values.getAsLong(Meta.Data.TIMESTAMP); // null, as expected
Date d2 = new Date(timestamp); // source of error
Maintenant, voici la chose intéressante. Ajout d'une montre sur new Date(timestamp)
lance
NullPointerException: ne peut pas unbox valeur null
ce qui est logique. Cependant, laissant cette même ligne normalement exécuter des rendements de code:
tentative d'invoquer la méthode virtuelle « à long java.lang.Long.longValue() » sur une référence d'objet nul
Ce que je suis deviner est la cause première de l'erreur unbox. Je comprends unboxing, mais je ne suis pas un expert, donc j'aimerais une meilleure explication de pourquoi la trace de la pile semble si étrange (et fastidieuse) pour cette erreur. Merci!
votre 'clé' n'est-elle pas nulle? ou mValues? ou "valeurs" dans la nouvelle date() –
Était un peu trop concis là. Je vérifie les "valeurs" nulles. Peu importe, j'obtiendrais une erreur différente pour la clé nulle, mValues, ou les valeurs que je crois. – Anthony
Avez-vous essayé de déboguer? Quelle est la valeur de 'Meta.Data.TIMESTAMP'? –