json数据
public class PackageModel<T> {
public T result;
public String message;
public int code;
}
{
"code": 0,
"message": "操作成功",
"result": {
"accessToken": "17049387C5E8D331CF8B5B2A9805880E",
"userId": "241520",
"account": "18688888888",
"sex": "1",
"userName": "号有",
"nickName": "测试",
"cityName": "天津 河北区",
"iconUrl": "https://www.it399.com",
"hasDevice": "1",
"email": "444445462@qq.com"
}
}
解析结果,是map而不是对象
Gson gson = new Gson();
PackageModel<T> eventBusModel2 = gson.fromJson(response.body(),PackageModel.class);
泛型只在编译期间起作用,运行期间是获取不到泛型信息的。即使我们在运行期间用反射去获取泛型类型,也是无效的。所以不要想着去获取泛型类型了
解析的时候利用反射获取此方法的返回值类型,那么解析json数据的时候就知道具体的类型了
/**
* 得到返回实体类型
* @return
*/
public Type getType() {
//获取线程运行栈信息
StackTraceElement stack[] = (new Throwable()).getStackTrace();
//获取请求被发起的地方的方法返回值
StackTraceElement s = stack[3];
String key = s.getMethodName();
final Type type = requestMethods.get(key);
return type;
}
注意getType的调用地方不同,stack[3]的值也不同,根据实际情况修改下标值
本文同步发布在 在线助手 ,转载请注明来自 在线助手博客 频道【java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法]】,原文链接:https://www.it399.com/blog/web/201806141400