吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1261|回复: 7
收起左侧

[求助] Java gson 数据转换问题求助-

[复制链接]
dmvip 发表于 2021-5-21 09:42
本帖最后由 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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

javazjl 发表于 2021-5-21 10:47
[Java] 纯文本查看 复制代码
public class Response<T> {
 
    public int code;
    public String msg;
    public boolean success;
    public T data;
}
 楼主| dmvip 发表于 2021-5-21 11:04
javazjl 发表于 2021-5-21 10:47
[mw_shl_code=java,true]public class Response {

    public int code;

T 和Result 是一样的 就一个占位符 而已
Mango_943 发表于 2021-5-21 14:22
天煞孤星888 发表于 2021-5-21 15:05
打印一下完整的报错信息是什么,对症下药
15198759548 发表于 2021-5-21 15:53
pojo权限改private,加上get,set试试
leon406 发表于 2021-5-22 10:09
泛型没有声明,  Result就是个类, 不是泛型

HttpCallback<Result> 这个onSuccess回调返回的是Result类型,不是泛型
 楼主| dmvip 发表于 2021-5-22 10:51
leon406 发表于 2021-5-22 10:09
泛型没有声明,  Result就是个类, 不是泛型

HttpCallback 这个onSuccess回调返回的是Result类型,不是泛 ...

应该怎么解决呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 12:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表