【问题标题】:Android OrmLite emptyString for String defaultValueAndroid OrmLite emptyString for String defaultValue
【发布时间】:2013-08-03 02:56:36
【问题描述】:

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

有人知道解决这个问题的方法吗?

【问题讨论】:

    标签: android ormlite


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,它以更简单的方式解决了我的问题,因为我找到的解决方法是设置 defaultValue=" " 然后修剪字符串以查看它是否为空。
    【解决方案2】:

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

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

    我已提交following bug report 并已将其修复到后备箱中。它将在 4.47 中。

    【讨论】:

    • 谢谢,我暂时使用 Rakesh 解决方案。等待4.47!! :) 感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多