Fra*_*ank 4 android realm gson retrofit2
当使用 Realm 和 Retrofit2 将自动管理的 RealmObject 发送到我们的服务器时,Retrofit2(使用 Gson)仅发送 RealmObject 中的整数。它完全忽略 Strings 和其他字段,并且不会将这些放入 json 中。没有记录任何错误。
但是,如果我将RealmObject与 Realm 断开连接:
realm.copyFromRealm(myRealmObject)
Run Code Online (Sandbox Code Playgroud)
然后它确实发送所有字段。可能是什么问题呢?有没有合适的解决办法呢?
在我在 Stackoverflow 上的一篇文章中,我解释了一起使用 Gson 和 Realm 时会发生什么(Retrofit 只是使用 Gson 作为数据转换器,所以失败的是 Gson,而不是 Retrofit)。链接发布在下面。
...仅发送 RealmObject 中的整数
没有!不只是ints...
如果仔细观察,您会发现甚至您的值ints也设置为 0(这是null的值int)。同样的事情也会发生在 a 上boolean,你会得到false序列化的输出。
事实上,您的所有属性都在管理 时RealmObject设置。当您尝试读取/写入属性(从托管)时,Realm将从/向持久层读取/写入其值(使用代理),因此您确定您正在获取/设置该属性的正确值(而不是只是从内存中获取旧值)。nullrealmObjectrealmObjectrealmObject
话虽这么说,我现在可以解释为什么 Gson 只序列化ints。
当你的属性是 an 时object,它的值将等于null(指向任何地方的引用)并且 Gson 不会费心序列化它(你不会在输出中看到它)。
当你的属性是一个缩放器类型(char, int, boolean, float...)时,它的值将等于与 a 对应的任何值null(标量中的每个位都是 0),并且 Gson 会序列化它,因为它被认为是有效值。这解释了“为什么只有你的ints被序列化”。
但是,如果我将 RealmObject 与 Realm 断开连接...那么它会发送所有字段。
当你的realmObject对象不受托管时,它将充当一个普通的 java 对象(不使用代理来维护内存中的对象与持久对象之间的一致性),当然 Gson 序列化它不会遇到任何问题。
有没有合适的解决办法呢?
有解决方法。在我之前提到的帖子中,我尝试收集一些推荐的(IMO)来解决这种不兼容性。链接如下:“Android:Realm + Retrofit 2 + GSON”。
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |