我正在编写ContentProvider类(用于书籍清单),并且在检查insert()函数中条目的有效性时陷入困境。如果该值无效,则抛出IllegalArgumentException。
一行是书的价格,该行定义为
FLOAT(2) NOT NULL DEFAULT 9999
因此,当我不接受显式值NULL时,我将接受未在给定ContentValues中定义价格。然后将其设置为默认值9999。 现在,我可以尝试获取与价格键相对应的浮动价格:
float price = values.getAsFloat(BookEntry.COLUMN_PRICE);
但是当键BookEntry.COLUMN_PRICE不在ContentValues中时,或者当它在其中但显式为NULL(或不能转换为Float)时,此函数给我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");
}
}
答案 0 :(得分:0)
您正在做什么-检查密钥是否在ContentValues
中-是正确的。 ContentValues
只是HashMap
的包装:如果映射不包含键的映射,或者如果值明确设置为null
,它将返回null
。 >
我可以事先使用的containsKey()函数进行检查 ContentValues(如果有条目,但到目前为止我还没有看过教程) 做到了。
有些教程以简化的方式(很好)显示信息(通常很好的编码方法,这很好,否则太复杂了)...因此,不要只局限于教程中看到的内容。有时候,您的直觉可以提出更好的解决方案;)。