无法从领域正确检索数据

时间:2016-04-16 17:41:01

标签: android realm

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

添加RealmModel:(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

输出:

GetAll Output in debugger

但有意思的是,在屏幕截图中显示的调试视图中,toString方法显示了正确的数据!

请帮助:)

1 个答案:

答案 0 :(得分:1)

泽亚德先生, 我为您浏览了Realm文档。他们有一份写得很好的文件,上面有你的问题的例子。

他们说,

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

See the Image

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

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

Read More Here

希望它有所帮助!