在项目中使用了Rxjava+Retrofit 作为网络框架,在使用中遇到遇到Gson无法解析泛型,出现ClassCastException。从代码看这个问题是由于Gson 拿不到我们要它解析的那个实体类的类型。本质上时因为Java的泛型擦除机制导致。
解决办法:将要解析的类型明确的传给gson
仿照GsonConverterFactory 写一个解析器,具体代码可以参考GsonConverterFactory,只需要修改加注释的地方,原先的TypeToken.get(type) 改为
mGson.getAdapter(new TypeToken<BaseResultEntity<CIBNRecommendBean>>() {
});
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
Retrofit retrofit) {
//类型为BaseResultEntity<CIBNRecommendBean>,解决gson获取泛型类型失败
TypeAdapter<?> adapter = mGson.getAdapter(new TypeToken<BaseResultEntity<CIBNRecommendBean>>() {
});
return new GsonResponseBodyConverter<>(mGson, adapter);
}