Realm-java: How to convert RealmObject to Gson format? please tell me ,ths!

Created on 19 Dec 2016  路  3Comments  路  Source: realm/realm-java

in my project,i want use realm and gson to simplify my work,but i find a bug : i can't use gson.toJson(realmObject), it will block or throw excepption stackOverflow:

Caused by: java.lang.StackOverflowError: stack size 1036KB at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:537) at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:109) at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:551) at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:109) at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:544) at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:109) at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:551) at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:109) at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:544) at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:109) at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:551) at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:109) at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:544) at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:109) at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:551)

T-Help

Most helpful comment

Gson gson = new GsonBuilder()
    .setExclusionStrategies(new ExclusionStrategy() {
        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            return f.getDeclaringClass().equals(RealmObject.class);
        }

        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }
    })
    .create();

And

gson.toJson(realm.copyFromRealm(obj));

All 3 comments

Sounds like you are using an older version of Realm? This should be fixed in 1.0.0 and onwards. See e.g https://realm.io/docs/java/0.88.0/#gson for how to set a proper ExclusionStrategy.

Gson gson = new GsonBuilder()
    .setExclusionStrategies(new ExclusionStrategy() {
        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            return f.getDeclaringClass().equals(RealmObject.class);
        }

        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }
    })
    .create();

And

gson.toJson(realm.copyFromRealm(obj));

@David-Kuper I assume the above solved your problem. If not, feel free to re-open.

Was this page helpful?
0 / 5 - 0 ratings