I use Retrofit, Gson and Realm in my project. I have an Example class that should be Serializable . Without the Kingdom, I would write this:
public class Example implements Serializable { @SerializationName("users") private List<String> users
The kingdom comes into play and Example becomes (note that getters and setters are the way for compatibility reasons):
public class Example extends RealmObject implement Serializable { @SerializedName("users") private RealmList<RealmString> users; public ArrayList<String> getUsers() { ArrayList<String> array = new ArrayList<>(); for (RealmString rs : users) { array.add(rs.getValue()); } return array; } public void setUsers(ArrayList<String> users) { RealmList<RealmString> array = new RealmList<>(); for (String rs : users) { array.add(new RealmString(rs)); } this.users = array; } }
using RealmString:
public class RealmString extends RealmObject implements Serializable { private String val;
and add a custom converter like Gson to deserialize it:
public class RealmStringRealmListConverter implements JsonSerializer<RealmList<RealmString>>, JsonDeserializer<RealmList<RealmString>> { @Override public JsonElement serialize(RealmList<RealmString> src, Type typeOfSrc, JsonSerializationContext context) { JsonArray ja = new JsonArray(); for (RealmString tag : src) { ja.add(tag.getValue()); } return ja; } @Override public RealmList<RealmString> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { RealmList<RealmString> tags = new RealmList<>(); JsonArray ja = json.getAsJsonArray(); for (JsonElement je : ja) { if (je.isJsonPrimitive()) { tags.add(new RealmString(je.getAsString())); } } return tags; } }
So, now we are starting to feel that Realm is beginning to strongly influence our code. But this is a problem, the main problem is that Example is no longer Serializable: RealmList is not.
so I tried to make the RealmList transition process and have its list of subscriptions, which I can annotate with @Ignore and recreate the RealmList after serialization. But the transient is not accepted by the kingdom.
Now I feel a little stuck, Example is passed through intentions in many parts of my code (it is a member of many classes). I do not want to use id and request it everywhere.
My question is:
How can I change Example` so that I can make new Bundle().putSerializable("test", new Example()); without crashing.
Thanks for the help!