制作GSON&领域玩的很好 [英] Making GSON & Realm play nice

查看:89
本文介绍了制作GSON&领域玩的很好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Realm + GSON。
如果它们能够很好地协同工作,那将是天堂里的一场比赛。

然而,当我用extends RealmObject扩展我的模型对象时,我得到这:

  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&amp;领域玩的很好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆