【问题标题】:Cant retrieve data correctly from realm [duplicate]无法从领域正确检索数据[重复]
【发布时间】:2016-04-17 02:26:17
【问题描述】:

我正在尝试实现一个通用领域包装器。所以,我可以传递一个带有其类的对象来添加/更新或获取。我正在使用领域浏览器来确认我正在正确保存数据,但是当我执行 getAll 查询时,我收到了一个数量正确且数据结构正确的数组,但所有字段都为默认值或 null。 这是我的代码:

添加领域模型:(UserRealmModel)

@Override
public void putAll(Collection<RealmObject> realmModels) {
    mRealm = Realm.getDefaultInstance();
    mRealm.beginTransaction();
    mRealm.copyToRealmOrUpdate(realmModels);
    mRealm.commitTransaction();
}

GetAllRealmModels:(UserRealmModel)

@Override
public RealmResults getAll(Class clazz) {
    return Realm.getDefaultInstance().allObjects(clazz);
}

我也试过了:

@Override
public RealmResults getAll(Class clazz) {
    return Realm.getDefaultInstance().where(clazz).findAll();
}

clazz = UserRealmModel.class

输出:

但有趣的是,在截图所示的调试视图中,toString 方法显示了正确的数据!

请帮忙:)

【问题讨论】:

    标签: android realm


    【解决方案1】:

    泽亚德先生, 我为你浏览了 Realm 文档。他们有一个写得很好的文档,其中包含您问题的示例。

    他们说,

    在 Android Studio 中的 RealmObject 上添加手表将显示字段的值。不幸的是,这些值是错误的,因为没有使用字段值。 Realm 在后台创建一个代理对象并覆盖 getter 和 setter,以便访问 Realm 中的持久数据。为任何访问器添加监视将产生正确的值。

    在上图中,调试器在第 113 行停止。共有三个监视值,person 变量以及 person.getName() 和 person.getAge() 访问器。第 107 到 111 行的代码通过更改姓名和年龄来更改人员实例。然后将这些值保存在事务中。在调试器当前暂停的第 113 行,人员监视实例正在报告字段值并且它们不正确。使用 person.getName() 和 person.getAge() 访问器的监视值报告的值是正确的。

    请注意,.toString() 方法将输出正确的值,但监视面板不会(在监视 RealmObject 变量时)。

    Read More Here

    希望对你有帮助!

    【讨论】:

    • 感谢您解决这个问题。这有点令人困惑,因为我将领域对象的结果投射到我的视图模型中,所以我丢失了所有数据
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    相关资源
    最近更新 更多