2014-10-08 8 views
15

Próbuję użyć Realm + GSON. Gdyby oni dobrze ze sobą współpracowali, byłby to mecz w niebie.Tworzenie GSON & Realm gra fajnie

Jednak, kiedy przedłużyć mojego modelu obiektów z „rozciąga RealmObject” mam to:

10-08 17:00:19.578 12492-12492/appwise.be.gsontestproject E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: appwise.be.gsontestproject, PID: 12492 
    java.lang.StackOverflowError 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:372) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) 
      at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:356) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:128) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:75) 
      at com.google.gson.Gson.getAdapter(Gson.java:358) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:109) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:84) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:83) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:129) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:75) 
      at com.google.gson.Gson.getAdapter(Gson.java:358) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:109) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:84) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:83) 
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:129) 
      at com.google.gson.internal.bin 

Wszelkie naprawić dostępne? :-)

+2

Wydaje się być błąd w GSON. Zobacz także: http://stackoverflow.com/questions/14565647/gson-2-2-2-causing-a-stackoverflow-on-4-2-1-only?rq=1. Doświadczyliśmy tego samego problemu. – bmunk

+0

Sztuczka obniżająca poziom do wersji 1.7.1 działa! – TomCB

Odpowiedz

26

U można zrobić to tak:

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(); 

String json = "{ name : 'John', email : '[email protected]' }"; User user = gson.fromJson(json, User.class);

http://realm.io/docs/java/0.77.0/#gson

+0

<3 absolutnie doskonały – Broak

+0

@ KillNono, Oszczędziłeś mi dużo czasu. Dzięki!! –

+1

Świetna odpowiedź, dziękuję – dowjones123