Android(安卓)Gson 泛型解析
16lz
2022-03-31
解析 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);
这个方法的第二个参数是传一个Type,我们可以来看看什么是Type
都知道能理解成是一个类型的接口。
如何获取这个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(安卓)| activity之间传递列表,以listview显示
- android获取短信所有内容
- Android利用反射获取状态栏(StatusBar)高度
- Android(安卓)使用广播(BroadcastReceiver)传递数据
- Appium:Android(安卓)- 等待activity出现(wait_activity)
- Android(安卓)签名信息读取
- android获取手机屏幕的宽度及高度
- android studio 获取android app sha1
- android软件设置gps自动开启