我有一个名为User的自定义对象,它是一个RealmObject。这个对象也有Moshi的注释,因为我打算在改装调用中使用这个对象。
User user = getRealm().where(User.class).findFirst();
当我向我的Realm DB查询这样的用户时:
{{1}}
我得到了这个回复(使用调试):
可以看出,对象尚未初始化,但值显示在第一行。
这里有什么问题?
当我将上述对象作为@Body参数传递时,它似乎是空的。
我还通过Fiddler进行了检查,发送到服务器的请求包含一个空对象。
问题:如何让这个对象获得正确的值?
答案 0 :(得分:2)
假设您正确保存和查询,它可能具有正确的值。 Realm创建每个扩展RealmObject
的子类版本作为“RealmProxy”对象,有时在调试器中它看起来不像您期望的那样。您会注意到您的类实际显示为UserRealmProxy
(但在User = ...之后它的内联值不为空)。
要查看非域代理版本,您必须使用Realm.copyFromRealm(...)
。
另外,请注意,从网络解析的任何内容都不会自动添加到Realm中 - 在这种情况下,您必须显式复制到域以获取以后查询的值,因为从网络解析的内容最初是不受管理的
答案 1 :(得分:2)
请重新考虑这个设计。
使用相同类型的本地持久性和网络节省了一些样板代码。随着您的应用程序越来越复杂,这种方法可能会变得非常脆弱。
创建一个基本值对象,UserJson和一个JSON适配器来映射它们的代码不多。使用Moshi的@ ToJson / @ FromJson方法,它也非常简单,甚至可以测试。这将为您提供未来的大量灵活性。