改造:gson stackoverflow
Retrofit : gson stackoverflow
我尝试使用改造和 gson 库发出 API 请求,我按照本教程使用改造发出 API 请求:
http://blog.robinchutaux.com/blog/a-smart-way-to-use-retrofit/ 但是我遇到了一个错误。这是日志消息的不同部分:
Retrofit﹕ java.lang.WhosebugError 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)
这是 class 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"
}
}
所以我提出了一个请求,一切正常,我得到了正确的答案,我可以得到值但是在请求之后这个错误出现了,我不知道为什么,这是 Gson 的问题图书馆?有办法解决这个问题吗?
我在 Nexus 5 android 5.0.1、retrofit 1.9.0 和 gson 2.3.1 上试用
提前感谢您的帮助!
当 Gson 尝试解析有关它必须反序列化的对象的类型信息时,会发生错误。由于在 extends 声明中循环引用您的 Book class,它进入无限递归。
然而,即使 Gson 可以应对您的 class,我也不建议使用这些库组合。当存在兼容性问题时会发生这种情况。尝试使用 older 版本的 Gson 并从项目中删除改造依赖项。
希望对您有所帮助!
我尝试使用改造和 gson 库发出 API 请求,我按照本教程使用改造发出 API 请求: http://blog.robinchutaux.com/blog/a-smart-way-to-use-retrofit/ 但是我遇到了一个错误。这是日志消息的不同部分:
Retrofit﹕ java.lang.WhosebugError 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)
这是 class 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"
}
}
所以我提出了一个请求,一切正常,我得到了正确的答案,我可以得到值但是在请求之后这个错误出现了,我不知道为什么,这是 Gson 的问题图书馆?有办法解决这个问题吗?
我在 Nexus 5 android 5.0.1、retrofit 1.9.0 和 gson 2.3.1 上试用
提前感谢您的帮助!
当 Gson 尝试解析有关它必须反序列化的对象的类型信息时,会发生错误。由于在 extends 声明中循环引用您的 Book class,它进入无限递归。
然而,即使 Gson 可以应对您的 class,我也不建议使用这些库组合。当存在兼容性问题时会发生这种情况。尝试使用 older 版本的 Gson 并从项目中删除改造依赖项。
希望对您有所帮助!