关于Retrofit2 gson转换器,怎么去自定义能转换不同对象问题

关于Retrofit2 gson转换器,怎么去自定义能转换不同对象问题。

img

如图,如果我调用的不是BasicResponse对象类型的json,他就会解析不了,那有什么办法,可以让他解析不同类型的对象了?

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/233625
  • 你也可以参考下这篇文章:Retrofit + GSON处理JSON模板
  • 除此之外, 这篇博客: Android 爬坑指南中的 4. Retrofit 当使用 Gson 解析 json 数据时,当 Response 定义为泛型 T 时,无法获取到结果 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 问题现象: 当使用 Gson 解析 json 数据时,如果结果类型是一个泛型比如 T,此时这个 T 如果又被其他类包裹,就会抛出异常:Caused by: java.lang.ClassCastException : com.google.gson.internal.LinkedTreeMap cannot be cast to …

    public static <T> ApiResponse<T> fromJson(String json){
        return new Gson().fromJson(json, new TypeToken<ApiResponse<T>>() {}.getType());
    }
    

    原因分析: Gson 中的 TypeToken 的实现逻辑是,根据 TypeToken 的派生类 , 使用 getGenericSuperclass 获取泛型信息,而泛型并没有办法被正确的传递。

    解决方案: 修改 fromJson 方法传递正确的类型,代码如下:

    public static <T> ApiResponse<T> fromJson(String json,Class<T> cla) {
        Type type= $Gson$Types.newParameterizedTypeWithOwner(null, ApiResponse.class, cla);
        return new Gson().fromJson(json, type);
    }
    

解析方式可以自定义,没有要求必须使用Base, 使用responseValue 试试


  .addConverterFactory(GsonConverterFactory.create())