如何使用Moshi的RealmObject

时间:2018-01-31 20:14:22

标签: android realm retrofit moshi

我有一个名为User的自定义对象,它是一个RealmObject。这个对象也有Moshi的注释,因为我打算在改装调用中使用这个对象。

User user = getRealm().where(User.class).findFirst();

当我向我的Realm DB查询这样的用户时:

{{1}}

我得到了这个回复(使用调试):

Realm Object

可以看出,对象尚未初始化,但值显示在第一行。

这里有什么问题?

当我将上述对象作为@Body参数传递时,它似乎是空的。

我还通过Fiddler进行了检查,发送到服务器的请求包含一个空对象。

问题:如何让这个对象获得正确的值?

2 个答案:

答案 0 :(得分:2)

假设您正确保存和查询,它可能具有正确的值。 Realm创建每个扩展RealmObject的子类版本作为“RealmProxy”对象,有时在调试器中它看起来不像您期望的那样。您会注意到您的类实际显示为UserRealmProxy(但在User = ...之后它的内联值不为空)。

要查看非域代理版本,您必须使用Realm.copyFromRealm(...)

另外,请注意,从网络解析的任何内容都不会自动添加到Realm中 - 在这种情况下,您必须显式复制到域以获取以后查询的值,因为从网络解析的内容最初是不受管理的

答案 1 :(得分:2)

请重新考虑这个设计。

使用相同类型的本地持久性和网络节省了一些样板代码。随着您的应用程序越来越复杂,这种方法可能会变得非常脆弱。

创建一个基本值对象,UserJson和一个JSON适配器来映射它们的代码不多。使用Moshi的@ ToJson / @ FromJson方法,它也非常简单,甚至可以测试。这将为您提供未来的大量灵活性。