AutoValue:ClassCastException:LinkedTreeMap无法强制转换为

时间:2016-09-16 12:09:27

标签: android gson retrofit auto-value

首先,我使用gson和autovalue-gson扩展进行改造

点击此处:https://github.com/rharter/auto-value-gson

在API中我有一个不同的模型,其中API返回带有id,描述等的json以及消息数组,但这些消息可能会根据我想要的社交媒体类型(facebook,twitter,instagram等)而有所不同。 )。所以我做了这样的模型:

@AutoValue
public abstract class SocialStream<T> {
  public abstract int id();
  ......
  ......

  public abstract List<T> messages();

  public static <T> TypeAdapter<SocialStream<T>> typeAdapter(Gson gson, TypeToken<? extends SocialStream<T>> typeToken) {
    return new AutoValue_SocialStream.GsonTypeAdapter(gson, typeToken);
  }
}

正如你所看到我也将typetoken传递给AutoValue typeAdapter,一切似乎都有效,我已经记录了整个json,但是当我尝试将它用作我的模型时会出现问题。

SocialStream<FacebookPost> post = getList().get(0);

方法getList()返回这些消息的数组,这是我获得异常的行:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.example.model.FacebookPost
at 

1 个答案:

答案 0 :(得分:0)

我和我一样有同样的问题。关键是创建一个定制的反序列化器,因为Gson不知道里面真正的类。 试试这个 https://stackoverflow.com/a/34685986/2458190