Android 领域2:发送自动管理对象

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和reformation2向服务器发送自动管理的RealmObject时,reformation2(使用Gson)只发送RealmObject中的int。它完全忽略字符串和其他字段,并且不将它们放在json中。没有记录任何错误

但是,如果我断开RealmObject与Realm的连接:

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

  • 如果属性是
    对象
    ,则其值将等于
    null
    (一个不指向任何地方的引用),并且Gson不会费心序列化它(您不会在输出中看到它)

  • 当属性是定标器类型(
    char
    int
    boolean
    float
    …)时,它的值将等于与
    null
    对应的任何值(标量中的每一位都是0),Gson将序列化它,因为它被认为是有效值。这解释了“为什么只有
    int
    被序列化”

但是,如果我断开RealmObject与领域的连接。。。然后就有了 发送所有字段

realmObject
是非托管的时,它将充当一个普通的java对象(不使用代理来保持内存中的对象和持久化对象之间的一致性),当然Gson将不会遇到序列化它的问题

有合适的解决办法吗


有一些变通办法。在我前面提到的帖子中,我试图收集一些推荐的(IMO)来处理这种不兼容性。以下是链接:。

谢谢@epicpandaforce非常感谢。。它救了我一天
realm.copyFromRealm()
在此处执行了trickThanks@AnixPasBesoinmore信息: