美文网首页
王学岗Gson解析和泛型和集合数据

王学岗Gson解析和泛型和集合数据

作者: 王学岗 | 来源:发表于2019-02-25 13:55 被阅读0次

第一:解析集合数据

Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";

List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());
//TypeToken的构造方法是protected修饰的,所以上面才会写成new TypeToken<List<String>>() {}.getType() 而不是 new TypeToken<List<String>>().getType()

第二:解析泛型
实体类

package com.haoshijinfu.fruitloan.net.Api;

/**
 * 回调信息统一封装类
 *
 */
public class BaseResultEntity<T> {
    //判断标示
    private int code;
    //提示信息
    private String message;
    //显示数据(用户需要关心的数据)
    private T data;
    //返回服务器时间
    private String time;
    //错误提示码
    private String error_code;
    //错误提示信息
    private String error_message;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getError_code() {
        return error_code;
    }

    public void setError_code(String error_code) {
        this.error_code = error_code;
    }

    public String getError_message() {
        return error_message;
    }

    public void setError_message(String error_message) {
        this.error_message = error_message;
    }

    @Override
    public String toString() {
        return "BaseResultEntity{" +
                "code=" + code +
                ", message='" + message + '\'' +
                ", data=" + data +
                ", time='" + time + '\'' +
                ", error_code='" + error_code + '\'' +
                ", error_message='" + error_message + '\'' +
                '}';
    }
}

package com.haoshijinfu.fruitloan.entity.result;

/**
 * Created by Dell on 2018/11/23.
 */

public class BindingBankCardEntity {
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}



                    @Override
                    public void success(String result) {
                        Gson gson = new Gson();
                        java.lang.reflect.Type type = new TypeToken<BaseResultEntity<BindingBankCardEntity>>() {
                        }.getType();
                        resultEntity = gson.fromJson(result, type);}

官方的建议,当目标类型含有泛型的时候,应该使用TypeToken;而不应写成

 BindingBankCardEntity bindingBankCardEntity=gson.fromJson(result,BindingBankCardEntity.class);

如果不用TypeToken,泛型参数会丢失,由于泛型参数丢失,gson会把丢失类型的对象转化为linkedTreemap,你用指定的泛型类型接收其实这一步它并没做强转,也就是说在你没用泛型类型的具体内容的时候这步的泛型只是声明上的意义而已,如果你用了,就会出类型转换异常;

相关文章

  • 王学岗Gson解析和泛型和集合数据

    第一:解析集合数据 第二:解析泛型实体类 官方的建议,当目标类型含有泛型的时候,应该使用TypeToken;而不应...

  • parameterizedType.getActualTypeA

    使用Gson结合泛型解析数据时,用到了这么一个方法 parameterizedType.getActualType...

  • 使用Gson结合泛型解析数据

    使用Gson结合泛型解析数据时,用到了这么一个方法 parameterizedType.getActualType...

  • Android Gson 解析泛型报错

    当用Gson解析泛型会报以下错误: com.google.gson.internal.LinkedTreeMap ...

  • Gson解析泛型数据

    解析BaseBean格式泛型数据 class Business{ private String descri...

  • 四、Java高级--1、泛型

    泛型定义:数据类型参数化,提前定义好集合中放入什么类型集合框架中没使用泛型和使用泛型的比较 泛型规则和限制1、泛型...

  • Gson解析泛型数据类型

    Gson解析泛型类型:Res Type type = new TypeToken(){}.getTyp...

  • 混淆后json解析出错

    开启混淆后打包,程序出现json解析出错 原因:没有配置忽略要解析的model。(已经配置了gson忽略文件和泛型...

  • Gson解析泛型

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

  • gson解析泛型

    list = gson.fromJson(jsonString,newTypeToken>(){}.getType...

网友评论

      本文标题:王学岗Gson解析和泛型和集合数据

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