Android Gson 泛型解析

解析 bean 类:

public class ResponseObj {
    private String code;
    private String toastMessage;
    private T data;

    public String getCode() {
        return code;
    }

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

    public String getToastMessage() {
        return toastMessage;
    }

    public void setToastMessage(String toastMessage) {
        this.toastMessage = toastMessage;
    }

    public T getData() {
        return data;
    }

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

}

T data  这是一个泛型对象,如果我们不传递泛型类,而是一个包含泛型的类,最后解析出来的还是LinkedTreeMap而不是你想要的bean类。

我们先看看平时如何使用Gson来解析json,就假设有个Test类吧。

Test  test  = gson.fromJson(json, Test.class);

Android Gson 泛型解析_第1张图片

这个方法的第二个参数是传一个Type,我们可以来看看什么是Type


Android Gson 泛型解析_第2张图片
都知道能理解成是一个类型的接口。

如何获取这个type呢,我在自己的程序中是通过反射获取到这个type。

protected Type clazz;


public AbstractQueryCallbackErrorCode() {
    ParameterizedType type = (ParameterizedType) this.getClass()
            .getGenericSuperclass();
    this.clazz =  type.getActualTypeArguments()[0];
}
protected ParameterizedType type(final Class raw, final Type... args) {
    return new ParameterizedType() {
        public Type getRawType() {
            return raw;
        }

        public Type[] getActualTypeArguments() {
            return args;
        }

        public Type getOwnerType() {
            return null;
        }
    };
}

最终调用解析类,进行数据解析。

private AbsHttpResposeBaseCodeBean fromJson(String json, Type clazz) {
    Gson gson = new Gson();
    Type objectType = type(AbsHttpResposeBaseCodeBean.class, clazz);
    return gson.fromJson(json, objectType);
}

其实就是要注意传递泛型类型的问题。

你可能感兴趣的:(android自学,android学习。)