繁体   English   中英

改造:GSON StackOverflow

[英]Retrofit : gson stackoverflow

我尝试使用Retrofit和gson库发出API请求,我按照本教程进行了Retrofit发出API请求: http ://blog.robinchutaux.com/blog/a-smart-way-to-use-retrofit/遇到错误。 这是日志消息的不同部分:

Retrofit﹕ java.lang.StackOverflowError at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:372)
...

 API.ItemTypeAdapterFactory.create(ItemTypeAdapterFactory.java:20)
        at com.google.gson.Gson.getAdapter(Gson.java:359)

这是ItemTypeAdapterFactory类:

public class ItemTypeAdapterFactory implements TypeAdapterFactory {
public <T> TypeAdapter<T> create(Gson gson, final TypeToken<T> type) {

    final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
    final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);

    return new TypeAdapter<T>() {

        public void write(JsonWriter out, T value) throws IOException {
            delegate.write(out, value);
        }

        public T read(JsonReader in) throws IOException {
            JsonElement jsonElement = elementAdapter.read(in);
            if (jsonElement.isJsonObject()) {
                JsonObject jsonObject = jsonElement.getAsJsonObject();
                if (jsonObject.has("content") && jsonObject.get("content").isJsonObject())
                {
                    jsonElement = jsonObject.get("content");
                }
            }
            return delegate.fromJsonTree(jsonElement);
        }
    }.nullSafe();
}
}

JSON

{
    "http_code":200,
    "content":{
        "token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "expires":"2015-03-18T04:45:53.066Z",
        "client":"XXXXXXXXXXXXXXXXXXXX",
        "createdAt":"2015-02-16T04:45:53.066Z",
        "updatedAt":"2015-02-16T04:45:53.066Z",
        "id":"XXXXXXXXXXXXXXXXXXXXX"
    }
}

因此,我提出了一个请求,一切正常,我得到了正确的答案,我可以获取值,但是在请求出现之后,这个bug出现了,我不知道为什么,这是Gson库的问题吗? 有办法解决吗?

我在Nexus 5 android 5.0.1,翻新版1.9.0和gson 2.3.1上尝试过

预先感谢您的任何帮助 !

当Gson尝试解析有关必须反序列化的对象的类型信息时,会发生错误。 由于扩展声明中对Book类的循环引用,它进入了无限递归。

但是,即使Gson可以应付您的课程,我也不建议使用这些库组合。 出现兼容性问题时,会发生这种情况。 尝试使用版本的Gson,并从项目中删除改造依赖项。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM