领域查找查询结果为空对象

Realm Find Queries Result in Empty Objects

在查找对象查询时,我得到 "empty" 个对象(非空,但未填充)。但是,在调试器中,我可以在对象描述中看到对象的数据(见下文)。我还使用 Realm Browser 验证了数据是否存在。我尝试了不同的查找查询、使用过滤条件查询、对 inserts/queries 使用相同的 Realm 对象、对 inserts/queries 使用不同的 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。关于为什么这里的模型没有填充有什么想法吗?

realm-java 背后的想法是我们正在生成代理 class 继承自用户的模型 class,并覆盖那里的 setter 和 getter。

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

正因为如此,当你想访问一个Realm模型的字段时,请始终使用setters和getters。检查生成的 Proxy class 将帮助您理解这一点,实际上它很简单。它位于名为 MyModelRealmProxy.java

的构建目录中

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