Bevor wir in
In einem meiner Beiträge hier auf Stackoverflow tauchen, habe ich erklärt, was passiert, wenn Gson und Realm mit zusammen (Retrofit wird mit nur Gson als Datenkonverter, so ist es Gson wer versagt nicht nachrüsten). Der Link ist unten aufgeführt.
tauchen Lassen Sie uns in
... sendet nur die Ints im RealmObject
Nope! Nicht nur ints
...
Wenn Sie genau hinsehen, werden Sie feststellen, dass auch Ihre ints
auf 0 gesetzt (das ist der null
Wert für ein int
). Das Gleiche würde mit einem boolean
passieren, würden Sie false
in der serialisierten Ausgabe erhalten.
Die Sache ist die, dass alle Ihre RealmObject
Attribute null
gesetzt werden, wenn die gleichen realmObject
verwaltet wird. Wenn Sie versuchen, ein Attribut zu lesen/schreiben (von einem verwalteten realmObject
), liest/schreibt Realm seinen Wert von/auf die Persistenzschicht (unter Verwendung von proxies), so dass Sie sicher sind, dass Sie den richtigen Wert dieser realmObject
erhalten/setzen (nicht nur einen alten Wert aus dem Speicher zu bekommen).
Das gesagt, ich kann jetzt erklären, warum Gson nur Serialisierung ints
ist.
Wenn Ihr Attribut ein object
ist, wird sein Wert auf null
gleich sein (eine Referenz zeigt nirgendwo) und Gson wird sich nicht die Mühe es Serialisierung (Sie werden nicht in der Ausgabe sehen).
Wenn Ihr Attribut eine Art Scaler ist (char
, int
, boolean
, float
...) sein Wert gleich sein, was auch immer entspricht ein null
(jedes Bit in dem Skalare 0) und Gson es wird serialisiert Ursache es gilt als ein gültiger Wert. Dies erklärt, warum nur Ihre ints
serialisiert sind.
Wenn ich aber die RealmObject von Realm trennen ... dann ist es alle Felder senden.
Wenn Ihre realmObject
unmanaged ist wird es ein normales Java-Objekt handelt (keine Proxies verwendet werden, um die Kohärenz zwischen dem Objekt im Speicher und hielt einen aufrechtzuerhalten) und natürlich Gson wird es keine Schwierigkeiten haben, die Serialisierung .
Gibt es eine richtige Lösung?
Es gibt Problemumgehungen. In dem Beitrag, den ich bereits erwähnt habe, habe ich versucht, einige empfohlene (IMO) zu sammeln, um diese Inkompatibilität zu beheben. Hier ist der Link: "Android: Realm + Retrofit 2 + GSON".
Dank @AnixPasBesoin –
weitere Infos hier: https://medium.com/@ffvanderlaan/realm-auto-updated-objects-what-you-need-to-know-b2d769d12d76#.yvpvsft1d – Frank