qq_921124136 2023-07-21 11:50 采纳率: 70%
浏览 7

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

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

img

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

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-21 14:07
    关注
    • 帮你找了个相似的问题, 你可以看下: 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);
      }
      
    评论

报告相同问题?

问题事件

  • 创建了问题 7月21日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表