Retrofit 返回泛型对象封装的问题(个人)

最近Android开发遇见了关于泛型的问题,服务器端返回的数据有些数据段是一样的,但有的不一样,所以就想用泛型来实现,如下:

这个是登录的返回结果:

《Retrofit 返回泛型对象封装的问题(个人)》

这个是注册的返回结果:

《Retrofit 返回泛型对象封装的问题(个人)》

可以看到,data的数据是不一样的,其他接口也是,所以data就想用泛型来封装,如下:

《Retrofit 返回泛型对象封装的问题(个人)》

但是因为Java的泛型的一些原因(详情可自己百度,我也是百度的,不是很秦楚,新手一枚),导致在解析返回数据中的泛型的时候一直报错。像com.google.gson.internal.LinkedTreeMap cannot be cast to my object这个错误,大概就是将解析的数据编程了LinkedTreeMap,然后你用自己的JavaBean去解析时类型不对应,不能替代。

网上找了很多方法,大多是用Type啥啥啥的,因为自己是新手,也不是很理解,代码又有点麻烦,试了下,还不适用,估计是自己的问题和那些大佬的不一样吧,然后就自己琢磨了。

将服务器端返回的泛型数据输出后发现是这样的

《Retrofit 返回泛型对象封装的问题(个人)》

它如果直接赋给一个类会直接报错。

我们仔细看一下这个数据,他并不是json的数据格式,不是冒号和双引号,而是等号,但是这确是一个对象,只不过是不能赋值给我们JavaBean的一个对象而已。所以我就想绕一下弯,想着将这个对象先转换成json字符串穿,然后再转换为我们想要它转换成的对象,过程是     A对象->json字符串->B对象,A对象是服务器直接传回来的data对象(泛型),B对象就是我们用来解析的JavaBean,然后成功了!代码如下:

Login Result;
Gson gson = new Gson();
String s = gson.toJson(result.getData());
System.out.println("s="+s);
Result= gson.fromJson(s, Login.class);

result是服务器返回的整个对象,getData()是获取泛型对象,Result是解析的JavaBean对象,Login.class是这个JavaBean。然后用gson(开发Retrofit必然用到的,所以不需要再导入包)转换就可以了。

就几行代码,就解决了,比在网上找的那些用Type那些一长串的代码还是用,当然也跟实际问题有关,只适合和我一样问题的新手解决问题。

 

    原文作者:qq_40807222
    原文地址: https://blog.csdn.net/qq_40807222/article/details/103568011
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞