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

2019-02-25  本文已影响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,你用指定的泛型类型接收其实这一步它并没做强转,也就是说在你没用泛型类型的具体内容的时候这步的泛型只是声明上的意义而已,如果你用了,就会出类型转换异常;

上一篇 下一篇

猜你喜欢

热点阅读