0

我正在使用 OrmLite 4.46 来管理我的 android 应用程序的数据库。

我有一个问题:

我的模型有以下代码:

public class Item extends Model {

        @DatabaseField(generatedId = true)
        private long        id;
        @DatabaseField(columnName = "item_name", defaultValue = "")
        private String      name;
        @DatabaseField(columnName = "item_count", defaultValue = "0")
        private int         count;

        public Item() {
            super();
        }
}

问题就在这里:

@DatabaseField(columnName = "item_name", defaultValue = "")
private String      name;

当我创建一个没有参数的新 Item() 并将其保存在数据库中时,通常在 item_name 列中它应该保存一个空字符串。

但是当我从数据库中检索项目并尝试

String itemName = item.getName().trim() 我得到一个 NullPointerException

所以看起来这个名字是空的。

我还检查了 sqlite db 文件中上述模型中创建的表,当我设置defaultValue=""该列时,创建的列没有默认值。

有人知道这个问题的任何解决方案吗?

4

2 回答 2

4

您可以在类级别将名称字段初始化为空字符串,例如:

@DatabaseField(columnName = "item_name", defaultValue = "")
private String name = "";

当您创建类对象Item并将其保存到数据库时,这会将名称字段初始化为空字符串。

当您从数据库中检索它时,名称字段将为空 ( "") 而不是null.

于 2013-08-02T11:55:15.503 回答
1

当我创建一个不带参数的新 Item() 并将其保存在数据库中时,通常在 item_name 列中它应该保存一个空字符串。

尽管@Rakesh 的回答是正确的,但事实证明这是ORMLite中的一个错误。如果字段是 ,则代码应该defaultValue在创建期间插入null。然而,有一个错误.equals("")阻止了这一切。

我已提交以下错误报告并已将其修复到主干中。它将在 4.47 中。

于 2013-08-02T18:56:36.633 回答