У меня есть ContentValues
, что я разбираю данные. Я только что получил очень странный отчет об ошибке:ContentValues getAsLong NullPointerException
Fatal Exception: java.lang.NullPointerException: Попытка вызвать виртуальный метод с длинным java.lang.Long.longValue() 'на нулевой объект ссылка
private void populateMeta(final ContentValues values)
{
if (values == null)
return;
Date d = new Date(values.getAsLong(Meta.Data.TIMESTAMP));
...
}
Когда я смотрю в getAsLong
я не могу понять, как это могло произойти:
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;
}
}
}
Он должен просто вернуть значение null, если поле равно null, нет?
Update:
Пытался несколько вещей, чтобы воссоздать эту трассировку стеки и в конце концов это сузило:
values = new ContentValues();
Long timestamp = values.getAsLong(Meta.Data.TIMESTAMP); // null, as expected
Date d2 = new Date(timestamp); // source of error
Теперь вот интересная вещь. Добавление часы на new Date(timestamp)
бросает
NullPointerException: не может распаковывать Нулевое значение
, который имеет смысл. Тем не менее, давая ту же линию выполнения обычно в коде выходов:
попытка вызвать виртуальный метод «долго java.lang.Long.longValue()» на нулевой ссылки на объект
Что я угадание является основной причиной ошибки unbox. Я понимаю unboxing, но я не эксперт, поэтому мне хотелось бы лучше объяснить, почему трассировка стека кажется такой странной (и тонкой) для этой ошибки. Благодаря!
Ваш «ключ» не является нулевым? или mValues? или «значения» в новой дате() –
Было немного слишком кратким. Я проверяю нулевые значения. Несмотря на это, я получаю другую ошибку для нулевого ключа, mValues или значений, которые, как я полагаю. – Anthony
Вы пытались отладить? Какова ценность 'Meta.Data.TIMESTAMP'? –