【问题标题】:Realm Find Queries Result in Empty Objects [duplicate]领域查找查询导致空对象[重复]
【发布时间】:2015-08-26 13:37:38
【问题描述】:

在对对象进行查找查询时,我得到“空”对象(非空,但未填充)。但是,在调试器中,我可以在对象描述中看到对象的数据(见下文)。我还使用领域浏览器验证了数据是否存在。我尝试了不同的查找查询,使用过滤条件进行查询,使用相同的 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。关于为什么这里的模型没有填充的任何想法?

【问题讨论】:

标签: android realm


【解决方案1】:

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

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

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

的构建目录中

同时检查这个section of the documents,它会给你一些关于standalone对象以及如何将它们写入Realm的想法。

【讨论】:

  • 我错过了文档中指定使用 getter/setter 的部分。我在每个 Realm 类中都有一个静态方法来转换为新的相应模型类,并且我可以直接访问 Realm 类的变量。将其切换为使用 getter/setter 解决了该问题。谢谢。
  • 如何使用代理?你能给我一些示例代码吗?谢谢。
  • @herbertD 您不需要显式使用代理类。托管领域对象上的任何调用/字段访问都是通过代理类调用的。见realm.io/docs/java/latest/…
  • 是的,现在我可以直接使用RealmObject了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多