Android ContentValues.get() отсутствует значение по сравнению со значением NULL
Я пишу класс ContentProvider (для инвентаря книги) и застрял при проверке правильности записей в функции insert(). Если значение недопустимо, я бы выбросил исключение IllegalArgumentException.
Одна строка - это цена книги, а строка определяется как
FLOAT(2) NOT NULL DEFAULT 9999
Поэтому, хотя я не принимаю явное значение NULL, я бы согласился с тем, что цена не определена в данных ContentValues. Затем будет установлено значение по умолчанию 9999. Теперь я могу попытаться получить значение с плавающей точкой, соответствующее ключу цены:
float price = values.getAsFloat(BookEntry.COLUMN_PRICE);
Но эта функция дает мне значение NULL либо тогда, когда ключ BookEntry.COLUMN_PRICE не находится внутри ContentValues, либо когда он там, но явно равен NULL (или не может быть преобразован в число с плавающей запятой). Я мог бы заранее проверить с помощью функции containsKey() ContentValues, есть ли запись, но никакой учебник, который я видел до сих пор, не делал этого.
Я делаю это слишком сложным или это путь?
//Check of the price is valid, i.e. larger than 0 and not null
if (values.containsKey(BookEntry.COLUMN_PRICE)) {
Float price = values.getAsFloat(BookEntry.COLUMN_PRICE);
if (price == null) {
throw new IllegalArgumentException("Price cannot be set as null and must be a float");
} else if (price <= 0) {
throw new IllegalArgumentException("Product requires a positive price");
}
}
1 ответ
Что вы делаете - проверка, находится ли ключ в ContentValues
- верно. ContentValues
это просто обертка вокруг HashMap
: вернется null
если карта не содержит сопоставления для ключа или если значение явно установлено в null
,
Я мог бы заранее проверить с помощью функции containsKey() ContentValues, есть ли запись, но никакой учебник, который я видел до сих пор, не делал этого.
Некоторые учебные пособия представляют информацию в упрощенном виде (что хорошо), довольно часто пропуская хорошие практики кодирования (что опять-таки хорошо, иначе это становится слишком сложным)... так что не ограничивайте себя только тем, что вы видите в учебниках. Иногда ваша интуиция может предложить лучшее решение;).