Android 领域2:发送自动管理对象
当使用Realm和reformation2向服务器发送自动管理的RealmObject时,reformation2(使用Gson)只发送RealmObject中的int。它完全忽略字符串和其他字段,并且不将它们放在json中。没有记录任何错误 但是,如果我断开RealmObject与Realm的连接:Android 领域2:发送自动管理对象,android,gson,realm,retrofit2,Android,Gson,Realm,Retrofit2,当使用Realm和reformation2向服务器发送自动管理的RealmObject时,reformation2(使用Gson)只发送RealmObject中的int。它完全忽略字符串和其他字段,并且不将它们放在json中。没有记录任何错误 但是,如果我断开RealmObject与Realm的连接: realm.copyFromRealm(myRealmObject) 然后它会发送所有字段。有什么问题吗?有合适的解决方案吗?您的代码领域。copyFromRealm(myRealmObject
realm.copyFromRealm(myRealmObject)
然后它会发送所有字段。有什么问题吗?有合适的解决方案吗?您的代码
领域。copyFromRealm(myRealmObject)
将RealmObject
更改为普通对象(POJO),如文档所述,创建已持久化RealmObject的非托管内存副本(尽管您可以定义深度
参数)
使用2
,现在只支持普通对象,我认为您的代码是绝对正确的,但是GSON读取字段值进行序列化,并且托管领域代理具有所有null
字段(读取)
使用realm.copyFromRealm()
将realmbject
更改为普通Java对象,并将其发送到服务器。,然后再深入研究
在我这里关于Stackoverflow的一篇文章中,我已经解释了一起使用Gson和Realm时会发生什么(改型只是将Gson用作数据转换器,所以Gson没有改型)。链接发布在下面
让我们潜水吧
。。。只发送RealmObject中的int
不!不仅仅是ints
如果仔细观察,您会注意到,即使是int
也被设置为0(这是int
的null
值)。使用布尔值
也会发生同样的情况,在序列化输出中会得到false
问题是,当同一个RealmObject
被管理时,所有RealmObject
属性都设置为null
。当您尝试读取/写入属性时(从托管的realmObject
),Realm将从/向持久化层读取/写入其值(使用),因此您可以确定您正在获取/设置此realmObject
的正确值(而不仅仅是从内存中获取旧值)
话虽如此,我现在可以解释为什么Gson只序列化ints
- 如果属性是
,则其值将等于对象
(一个不指向任何地方的引用),并且Gson不会费心序列化它(您不会在输出中看到它)null
- 当属性是定标器类型(
,char
,int
,boolean
…)时,它的值将等于与float
对应的任何值(标量中的每一位都是0),Gson将序列化它,因为它被认为是有效值。这解释了“为什么只有null
被序列化”int
realmObject
是非托管的时,它将充当一个普通的java对象(不使用代理来保持内存中的对象和持久化对象之间的一致性),当然Gson将不会遇到序列化它的问题
有合适的解决办法吗
有一些变通办法。在我前面提到的帖子中,我试图收集一些推荐的(IMO)来处理这种不兼容性。以下是链接:。谢谢@epicpandaforce非常感谢。。它救了我一天
realm.copyFromRealm()
在此处执行了trickThanks@AnixPasBesoinmore信息: