美文网首页
杂记篇 — JSON解析泛型数据封装网络请求

杂记篇 — JSON解析泛型数据封装网络请求

作者: 一盘好书 | 来源:发表于2020-04-22 22:39 被阅读0次

1 解析泛型数据

当使用JSON进行网络数据解析时,我们通常希望往回调函数传递什么参数,JSON就能解析成相应对象给我们。

我们来用伪代码来看看网络请求中解析泛型的过程是怎么样的,网络请求时,我们通常希望的过程是如下这个样子:

Request request = new Request();

ResultCallBack callBack = new ResultCallBack<Fruit>(){

    @Override
    public void onResponseSuccess(Fruit fruit) {
        LogUtils.d("fruit: " + fruit.price);
    }
};
request.sendRequest(callBack);

而ResultCallBack的代码也相当简单,这里就只添加了成功返回时的方法,失败的也类似。

public abstract class ResultCallBack<T> {
    public abstract void onResponseSuccess(T t);
}

而请求的伪代码如下:

    public <T> void sendRequest(ResultCallBack<T> callBack) {

        String result = "{\n" +
                "    \"price\": 12\n" +
                "}";

        // 获取callBack类父类的类信息
        Type callBackType = callBack.getClass().getGenericSuperclass();
        if (callBackType != null) {
            // 获取泛型类型数组
            Type[] array = ((ParameterizedType) callBackType).getActualTypeArguments();
                        
            Object obj = JSON.parseObject(result, array[0]);

            callBack.onResponseSuccess((T) obj);
        }
    }

2 问题

之前在网上看到有人问:为什么只有ResultCallBack为抽象类时,getGenericSuperclass方法获取的type值才能转换成ParameterizedType类型并且获得相应的泛型类型。

其实想搞懂这个问题,我们得先看看getGenericSuperclass这个方法,它是表示返回父类的type类信息,当ResultCallBack为抽象类,那所有由ResultCallBack进行初始化的类,全部都是ResultCallBack的子类,这样getGenericSuperclass方法才能获取到ResultCallBack的所有type信息,包括泛型信息。

相关文章

  • 杂记篇 — JSON解析泛型数据封装网络请求

    1 解析泛型数据 当使用JSON进行网络数据解析时,我们通常希望往回调函数传递什么参数,JSON就能解析成相应对象...

  • 网络

    NSURLConnection NSURLSession 普通网络请求 JSON数据解析 JSON序列化 数据解析...

  • Gson解析泛型

    做网络请求的时候肯定要封装回调,我这里就传了泛型,但是出了个问题是Gson没办法直接解析泛型,如果直接解析的话,不...

  • 五、Groovy语法(五)json、xml解析

    Groovy数据解析 一、json解析 请求网络数据并解析 二、xml解析 groovy解析xml数据 groov...

  • JSON 转含有泛型属性的对象

    返回的json数据里嵌套了对象,接收对象里嵌套了泛型。 解析方式: 1.JSON.parseObject();解析...

  • 请求数据

    使用到 Okhttp网络请求 Glide图片加载库 Json解析之Gson OKHttp网络请求的封装:我用的是O...

  • Swift 运用协议泛型封装网络层

    Swift 运用协议泛型封装网络层 Swift 运用协议泛型封装网络层

  • Flutter Dio网络请求

    Dart packages 网络请求使用dio.dart 数据解析使用json_serializable和json...

  • 06-网络(2)

    0713JSONXML解压缩 1、模型、字典、JSON(02-json解析01) 网络请求下来的json数据在...

  • AFNetworking

    http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众...

网友评论

      本文标题:杂记篇 — JSON解析泛型数据封装网络请求

      本文链接:https://www.haomeiwen.com/subject/aznbihtx.html