领域在空对象中查找查询结果

时间:2015-08-25 23:28:17

标签: android realm

在查找对象的查询时,我得到了#34;空的"对象(非空,但未填充)。但是,在调试器中,我可以在对象描述中看到对象的数据(见下文)。我还使用Realm浏览器验证了数据。我尝试过不同的查找查询,使用过滤条件查询,使用相同的Realm对象进行插入/查询,使用不同的Realm对象进行插入/查询,刷新Realm等等。

如果我在RealmObject中记录字段,我会看到正确的数据打印输出。但是,我试图将这些模型转换为其他模型,以便在每个https://realm.io/news/using-realm-with-rxjava/的RxJava中使用。

这里有一些示例代码,其中重现了该问题。下面是在verifyRealm.close()打破时的屏幕截图。

RealmTester realmTester1 = new RealmTester();
realmTester1.setFirstName("Tester1");
realmTester1.setLastName("ABC");
RealmTester realmTester2 = new RealmTester();
realmTester2.setFirstName("Tester2");
realmTester2.setLastName("XYZ");

Realm insertRealm = Realm.getDefaultInstance();
insertRealm.refresh();
insertRealm.beginTransaction();
insertRealm.copyToRealm(realmTester1);
insertRealm.copyToRealm(realmTester2);
insertRealm.commitTransaction();
insertRealm.close();

Realm verifyRealm = Realm.getDefaultInstance();
RealmResults<RealmTester> verifyTesters = verifyRealm.where(RealmTester.class).findAll();
verifyRealm.close();

我在http://i.stack.imgur.com/1UdRr.png

上有调试器的屏幕截图

我正在使用v0.82.1。关于为什么这里的模型没有填充的任何想法?

1 个答案:

答案 0 :(得分:4)

realm-java背后的想法是我们从用户的模型类生成Proxy类继承,并覆盖那里的setter和getter。

在调试器中看到模型字段的null值是完全正常的,因为Realm没有设置它们。 (零拷贝,Realm试图通过管理本机代码中的数据并尽可能地共享它们来减少内存使用量。)

因此,当您想要访问Realm模型的字段时,请始终使用setter和getter。检查生成的Proxy类将帮助您理解这一点,实际上非常简单。它位于名为MyModelRealmProxy.java

的构建目录中

还要检查此section of the documents,它会让您了解standalone对象以及如何将它们写入Realm。