Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Realm, GSON and primitive JSON arrays
// Make a custom Gson instance, with a custom TypeAdapter for each wrapper object.
// In this instance we only have RealmList<RealmInt> as a a wrapper for RealmList<Integer>
Type token = new TypeToken<RealmList<RealmInt>>(){}.getType();
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
public boolean shouldSkipClass(Class<?> clazz) {
return false;
.registerTypeAdapter(token, new TypeAdapter<RealmList<RealmInt>>() {
public void write(JsonWriter out, RealmList<RealmInt> value) throws IOException {
// Ignore
public RealmList<RealmInt> read(JsonReader in) throws IOException {
RealmList<RealmInt> list = new RealmList<RealmInt>();
while (in.hasNext()) {
list.add(new RealmInt(in.nextInt()));
return list;
// Convert JSON to objects as normal
List<MainObject> objects = gson.fromJson(json, new TypeToken<List<MainObject>>(){}.getType());
// Copy objects to Realm
{ "name" : "Foo",
"ints" : [1, 2, 3]
{ "name" : "Bar",
"ints" : []
public class MainObject extends RealmObject {
private String name;
private RealmList<RealmInt> ints;
// Getters and setters
public class RealmInt extends RealmObject {
private int val;
public RealmInt() {
public RealmInt(int val) {
this.val = val;
// Getters and setters

jemshit commented Sep 9, 2016 edited

Don't we need to define primary key for RealmInt ? so it does not overwrite. Consider i have two RealmList in Model and they have same values, then i want to change one of the list's value and leave other RealmList same, is this possible with this implementation? @cmelchior

koocbor commented Sep 23, 2016

if the primitive array can be null you might want to add this check to your read method:

if (in.peek() == JsonToken.NULL) {
   return null;

This was very helpful, thank you.


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment