本帖最后由 dmvip 于 2021-5-21 11:54 编辑
我现在需要的是把网络返回的json字符串通过Gson转让换成对象(Result就是用户接收数据的类型)
这是我转接口代码
[Java] 纯文本查看 复制代码 public abstract class HttpCallback<Result> implements ISuccess {
@Override
public void onSuccess(String result) {//result就是网络回来的数据
//result把转换成用户需要的对象
Gson gson = new Gson();
//需要得到用户输入的对象对应的字节码是什么样的
//得到用户接收数据的对象对应的class
Class<?> clz = getSuperClassGenricType(this.getClass(), 0);
Result objResult = (Result) gson.fromJson(result, clz);
//把已经转好的对象,交给用户
onSuccess(objResult);
}
public abstract void onSuccess(Result result);
public static Class getSuperClassGenricType(Class clazz, int index) throws IndexOutOfBoundsException {
Type genType = clazz.getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
return Object.class;
}
if (!(params[index] instanceof Class)) {
return Object.class;
}
return (Class) params[index];
}
}
result是 网络返回的json数据:
[Java] 纯文本查看 复制代码 {
"code": 0,
"data": {
"age": 1,
"name": "test0"
},
"success": true
}
通过Gosn 需要转的Response对象 ,如果这样是没问题的,可以正常转换,
[Java] 纯文本查看 复制代码 public class Response {
public int code;
public String msg;
public boolean success;
public DataEntity data;
public class DataEntity {
public String name;
private Integer age;
}
}
我现在需要把 DataEntity 提取出来,放在泛型里面,正常的javaBen 是没有问题 就是加泛型在转的时候报错了,
[Asm] 纯文本查看 复制代码 public class Response<Result> {
public int code;
public String msg;
public boolean success;
public Result data;
}
[Asm] 纯文本查看 复制代码 new HttpCallback<Response<DataEntity>>() {
@Override
public void onSuccess(Response<DataEntity> response) {
}
})
然后我去是现实这个接口就报换错误,跪求大神解答
报错信息:com.google.gson.internal.LinkedTreeMap cannot be cast to xxxxxx |