我正在编写一个 ContentProvider 类(用于图书库存),并在检查 insert() 函数中条目的有效性时卡住了。如果该值无效,我将抛出 IllegalArgumentException。
一行是书的价格,该行定义为
FLOAT(2) NOT NULL DEFAULT 9999
因此,虽然我不接受明确的值 NULL,但我会接受价格未在给定的 ContentValues 中定义。然后将其设置为默认值 9999。现在我可以尝试获取与价格键对应的浮点数:
float price = values.getAsFloat(BookEntry.COLUMN_PRICE);
但是,当键 BookEntry.COLUMN_PRICE 不在 ContentValues 中或在其中但显式为 NULL(或无法转换为浮点数)时,此函数给我 NULL。如果有条目,我可以事先使用 ContentValues 的 containsKey() 函数进行检查,但到目前为止我没有看到任何教程这样做。
我是不是让这太复杂了,或者这就是要走的路?
//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");
}
}