用于String defaultValue的Android OrmLite emptyString

时间:2013-08-01 19:52:45

标签: android ormlite

我正在使用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=""时,创建的列没有默认值。

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

  

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

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

我已经提交了following bug report并已将其修复为主干。它将在4.47。