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

参见英文答案 > Cannot retrieve field values from realm object, values are null in debugger                                    3个
在查找对象的查询时,我得到“空”对象(非空,但未填充).但是,在调试器中,我可以在对象描述中看到对象的数据(见下文).我还验证了使用Realm Browser的数据.我尝试了不同的查找查询,使用过滤条件查询,使用相同的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.有关为什么这里的模型没有填充的任何想法?

解决方法:

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

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

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

并且还检查这个section of the documents,它会让你对独立对象以及如何将它们写入Realm有所了解.

上一篇:java – 使用Realm浏览器在Mac上查看realm文件的加密密钥


下一篇:Android:在领域迁移中更改旧主键