如果一个数据类,其中一个字段类型可能为多种,那么这个数据类就可以写为泛型类。最常见的就是服务端返回的响应数据Response。这个数据类里面status字段与msg字端类型固定,只有data这个字段存在多种类型数据的可能,因此就用通配符T来替代这个字段类型。比如:

public class TzCloudResponse<T>{protected int status;protected T data;protected  String msg;public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public T getData() {return data;}public void setData(T data) {this.data = data;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}/*** 判断是否响应成功* @return*/public boolean isResponseSuccess(){return status == 1;}
}

显然,拿到服务端的响应Response后,需要对其body进行json解析,这时候就需要知道TzResponse<T>的实际Type了。

这个解析的接口为:

public abstract class TzBaseCloudCallback<T> extends Callback<TzCloudResponse<T>> {@Overridepublic TzCloudResponse<T> parseNetworkResponse(Response response, int i){try {String responseStr = response.body().string();TzCloudResponse<T> result = new Gson().fromJson(responseStr,getType());return result;}catch (Exception e){Lg.printException(e);}return null;}@Overridepublic void onError(Call call, Exception e, int i) {Lg.printException(e);doOnError(call, e, i);}protected abstract void doOnError(Call call, Exception e, int i);protected abstract Type getType();}

然后针对每个功能接口实现不同的getType,比如我上传文件的回调就可以写成:

mUploadRequestCall.execute(new TzBaseCloudCallback<TzUploadResult>(){@Overrideprotected void doOnError(Call call, Exception e, int i) {callBack.onError();}@Overrideprotected Type getType() {return new TypeToken<TzCloudResponse<TzUploadResult>>(){}.getType();}@Overridepublic void onResponse(TzCloudResponse<TzUploadResult> response, int i) {if(response != null && response.isResponseSuccess()){callBack.onSuccess(response.getData());}else{callBack.onError();}}});

这样json 解析就没有问题了。

这样可以避免构建多个数据类,也避免了构建多个回调接口,这就是传说中的多态吧,整挺好。

Gson解析泛型类数据相关推荐

  1. gson解析php,php,android_关于 Gson 解析JSON数据。。。,php,android - phpStudy

    关于 Gson 解析JSON数据... 1.首先,我是从服务器端传回来的JSON数据如下: {"info":"succeed","user_id&qu ...

  2. Gson解析JSON数据中动态未知字段key的方法

    转载自:https://blog.csdn.net/jdsjlzx/article/details/76785239 有时在解析json数据中的字段key是动态可变的时候,由于Gson是使用静态注解的 ...

  3. Android中Gson解析json数据使用@SerializedName注解

    @SerializedName 此注解作用在属性上,表明这个属性在序列化成Json的时候,需要将名字序列化成注解的value属性指定的值. 我们有一段json数据如下: { "id" ...

  4. JSONObject 和 GSON 解析 JSON 数据详解(转)

    转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...

  5. 从零使用okhttp和gson解析聚合数据的新闻头条API

    这里只简单介绍一下我自己的demo,具体原理学习还是建议阅读一下官方的文档或者别人整理好的内容.我的demo可以作为实际跑通的参考,加深理解.可能写的本身也不完美. ·准备工作:注册聚合数据的账号→申 ...

  6. Okhttp源码分析以及Google Gson解析json数据实例

    Okhttp Github的Okhttp OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接 透明的GZIP压缩减少响 ...

  7. Android利用Gson解析Json数据

    其实,要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个 ...

  8. 用Google提供的Gson解析JSON数据

    2019独角兽企业重金招聘Python工程师标准>>> 解析Json也就是触类旁通的一个过程,废话不说,比如我们要解析一个下面这种的Json,我们用的是Google的一个开源Gson ...

  9. Gson解析json数据 亲自测试可用

    2019独角兽企业重金招聘Python工程师标准>>> {     HosPitalInventoryInfo: {         HosPitalInventorylist: [ ...

最新文章

  1. 2020年ACM Fellows出炉!颜水成、周昆、陈怡然等12位华人当选
  2. 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!...
  3. linux服务器安全
  4. twiiq开发随笔(2)
  5. SAP Business Area 业务范围
  6. 再好的工作是为了更好的生活
  7. C#正则表达式开源工具
  8. Bootstrap 警告框的外观
  9. Intel Core Enhanced Core架构/微架构/流水线 (10) - 先进存储器访问
  10. node.js 回调函数
  11. python中属性_列表中的Python属性
  12. [摘抄] 匈牙利命名法
  13. 阿里云域名绑定IP手把手教学
  14. 如何降低和开发人员的bug沟通成本?
  15. U盘装机大师安装GHOST WIN10系统
  16. 月入万元的SEO优化师:分享我几年接私单的经历
  17. 【冷冻电镜|论文阅读】A feature-guided, focused 3D signal permutation method for subtomogram averaging
  18. Windows徽标键(WinKey)的屏蔽和恢复
  19. Day.js —— 一个轻量型的日期时间库 moment 的完美代替品
  20. 【XR】为挑战性环境优化6DoF控制器追踪

热门文章

  1. office2007 word 图片无法显示问题解决了
  2. [DDCTF2018]流量分析(TLS)
  3. 互联网时代与大学生创业
  4. 如何留住vscode运行框?
  5. GNN图神经网络详述-01
  6. 异步时钟引起的亚稳态问题和跨时钟域电路设计
  7. 鸿蒙系统把安卓手机死机,三星手机BUG是被冤枉的,死机根源在安卓系统,唯独华为手机没事...
  8. 数据智能提升企业创新能力
  9. ps play服务器没有响应mac,【攻略技巧】人在外心在家 教你用PC/MAC远程打PS4
  10. 项目沟通管理干系人管理