0

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

1 回答 1

0

你在做什么 - 检查钥匙是否在ContentValues- 是正确的。AContentValues只是一个包装器:如果映射不包含键的映射或者值显式设置为HashMap,它将返回。nullnull

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

一些教程以简化的方式呈现信息(这很好)经常忽略良好的编码实践(这也很好,否则它变得太复杂)......所以不要只限于你在教程中看到的内容。有时您的直觉可以提出更好的解决方案;)。

于 2018-08-18T19:33:46.880 回答