Android ContentValues.get()null与value缺失

时间:2018-08-18 16:48:12

标签: android android-contentprovider content-values

我正在编写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");
        }
    }

1 个答案:

答案 0 :(得分:0)

您正在做什么-检查密钥是否在ContentValues中-是正确的。 ContentValues只是HashMap的包装:如果映射不包含键的映射,或者如果值明确设置为null,它将返回null。 >

  

我可以事先使用的containsKey()函数进行检查   ContentValues(如果有条目,但到目前为止我还没有看过教程)   做到了。

有些教程以简化的方式(很好)显示信息(通常很好的编码方法,这很好,否则太复杂了)...因此,不要只局限于教程中看到的内容。有时候,您的直觉可以提出更好的解决方案;)。