當使用自動發送管理RealmObjects到我們的服務器領域和Retrofit2,Retrofit2(使用GSON)僅發送RealmObject的整數。它完全忽略了字符串和其他字段,並沒有把這些放在json中。沒有錯誤記錄。境界與Retrofit2:發送自動管理對象
如果我然而,從境界斷開RealmObject:
realm.copyFromRealm(myRealmObject)
然後它發送所有領域。可能是什麼問題呢?有沒有合適的解決方案?
當使用自動發送管理RealmObjects到我們的服務器領域和Retrofit2,Retrofit2(使用GSON)僅發送RealmObject的整數。它完全忽略了字符串和其他字段,並沒有把這些放在json中。沒有錯誤記錄。境界與Retrofit2:發送自動管理對象
如果我然而,從境界斷開RealmObject:
realm.copyFromRealm(myRealmObject)
然後它發送所有領域。可能是什麼問題呢?有沒有合適的解決方案?
之前,我們在
潛水在這裏#2我的職位之一,我已經解釋了什麼是使用GSON和境界一起(改造只是使用GSON作爲數據轉換器時發生的,所以它的GSON誰的失敗不改造)。鏈接在下面發佈。
讓我們在
潛水......只發送整數的RealmObject
都能跟得上!不只是ints
...
如果你仔細觀察,你會發現,即使你ints
被設置爲0(這是一個int
的null
值)。同樣的事情將與boolean
發生,你會序列化輸出得到false
。
的事情是,你的所有RealmObject
屬性設置爲null
,同一個realmObject
是管理。當您嘗試讀/寫屬性(從管理realmObject
),境界會讀/自/至持久層(使用proxies)寫它的價值,所以你是確保你得到/設置該realmObject
權值(不只是從內存中獲取舊值)。
話雖這麼說,我現在就可以解釋爲什麼GSON只序列化ints
。
當你的屬性是object
,它的價值將等於null
(參考指向無處)和GSON不會打擾其序列(你不會看到它的輸出)。
當你的屬性是定標器類型(char
,int
,boolean
,float
...)將其值等於不管相當於null
(每一位在標爲0),並GSON將序列化事業它被認爲是一個有效的價值。這解釋了「爲什麼只有你的ints
被序列化」。
如果我然而,從境界斷開RealmObject ...那麼它確實 發送所有領域。
當你的realmObject
是非託管它會起到一個普通的Java對象(無代理被用來保持在內存中的對象和持久保存的一個之間的一致性),當然GSON的不會有任何麻煩它序列化。
有沒有合適的解決方案?
有解決方法。在我之前提到的文章中,我試圖收集一些推薦的文章(IMO)來解決這種不兼容問題。以下是鏈接:"Android: Realm + Retrofit 2 + GSON"。
您的代碼realm.copyFromRealm(myRealmObject)
改變RealmObject
正常對象(POJO)表示,通過文件使得已經持續RealmObject非託管內存拷貝(儘管你可以定義depth
參數。)
隨着Retrofit2
,現在只支持普通對象,我覺得你的代碼是完全正確的,但對於GSON系列化讀取字段值,以及管理領域的代理都null
字段(讀here)。
使用realm.copyFromRealm()
並將其發送到服務器更改RealmObject
成普通Java對象。
感謝@EpicPandaForce –
感謝@AnixPasBesoin –
更多資訊:https://medium.com/@ffvanderlaan/realm-auto-updated-objects-what-you-need-to-know-b2d769d12d76#.yvpvsft1d – Frank