制作GSON&领域玩的很好 [英] Making GSON & Realm play nice
本文介绍了制作GSON&领域玩的很好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用Realm + GSON。
如果它们能够很好地协同工作,那将是天堂里的一场比赛。
10-08 17:00:19.578 12492-12492 / appwise.be.gsontestproject E / AndroidRuntime:致命例外: main
过程:appwise.be.gsontestproject,PID:12492
com.google.gson.internal。$ java.lang.StackOverflowError
$ Gson $ Types.resolve($ Gson $ Types。 java:372)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google.gson.internal。$ Gson $类型.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google。 gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
at com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:3 81)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google.gson.internal。$ Gson $ Types.resolve ($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google.gson。 $ G $ $ Types.resolve($ Gson $ Types.java:381)
at com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types .java:376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
,位于com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
com.google .gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
at com.google.gson.int $ G $ $ Types.resolve($ Gson $ Types.java:381)
at com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types .java:376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
,位于com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
com.google .gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
at com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java: 376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:381)
在com.google.gson.internal。$ Gson $ Types.resolve ($ Gson $ Types.java:376)
在com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:356)
在com.google.gson。 internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:128)
处com.google.gson com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:75)
。 Gson.getAdapter(Gson.java:358)
,位于com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
,位于com.google.gson.internal.bind。 ReflectiveTypeAdapterFactory.access $ 100(ReflectiveTypeAdapterFactory.java:46)
,位于com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.< init>(ReflectiveTypeAdapterFactory.java:84)
在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:83)
在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:129)
在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:75)上
在com.google.gson.Gson.getAdapter(Gson.java:358)
在com.google .gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
。在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access $ 100(ReflectiveTypeAdapterFactory.java:46)$ b $在COM湾google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1< INIT>(ReflectiveTypeAdapterFactory.java:84)
。在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:83)
在com.google .gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bin
有任何可用的修补程序? : - )
解决方案
U可以这样做:
GSON GSON =新GsonBuilder()
.setExclusionStrategies(新ExclusionStrategy(){
@覆盖
公共布尔shouldSkipField(FieldAttributes F){
返回f.getDeclaringClass()。equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz){
return假;
}
})
.create();
String json ={name:'John',email:'john @ corporation.com'};
User user = gson.fromJson(json,User.class);
http://realm.io/docs/java/0.77.0/#gson
I'm trying to use Realm + GSON. If they would work together well, it would be a match made in heaven.
However, when I extend my model objects with "extends RealmObject" I get this:
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
Any fix available? :-)
解决方案
U can do it like this:
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 : 'john@corporation.com' }";
User user = gson.fromJson(json, User.class);
http://realm.io/docs/java/0.77.0/#gson
这篇关于制作GSON&领域玩的很好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文