领域查找查询结果为空对象
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 有所了解。
在查找对象查询时,我得到 "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 有所了解。