我正在使用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=""
时,创建的列没有默认值。
有人知道这个问题的任何解决方案吗?
答案 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。