retrofit数据返回类型不统一解析方法
来源:互联网 发布:江苏省网络文学院 编辑:程序博客网 时间:2024/04/30 03:22
最新做的新项目里遇到接口返回类型不同一的情况没有按照默认格式返回,有点小头疼,这里自己写了个方法偷懒下
正常在开发的时候后台返回的json数据一般会遵从一定的格式返回,但也不排除会遇到一些数据没有格式的情况
正常格式的返回一般是这个样子
但是有的情况后台返回的是这个样子
也就是啥格式都没,时候该怎么办
因为retrofit是没有提供直接取出返回的json的,所以我们需要把 我们的请求返回的类型改成okhtttp的ResponseBody
列如:
Observable<ResponseBody> login( @Query("r_type") int tpye, @Query("username") String userId, @Query("password") String password);然后在返回的时候
String json = new String(responseBody.bytes());就可以拿到返回的JSON字符串了
然后我们使用GSON解析成我们自己需要的类就可以了
下面是自己写的一个类用来直接将返回的数据取出来转成相应的类
/** * Created by bcy on 2017/11/2.、 * 将接口ResponseBody数据转换成对应的Bean * 此方法主要是为了解决接口返回数据结构不统一问题 */public class JSONTOBean { private static JSONTOBean Instance=null; public Object JSONTOBean(ResponseBody body, Class clazz){ Object obj=null; try { String json = new String(body.bytes()); Gson gson =new Gson(); obj=gson.fromJson(json,clazz); } catch (IOException e) { e.printStackTrace(); } return obj; } //单例模式 public static JSONTOBean getInstance() { if (Instance==null){ Instance=new JSONTOBean(); } return Instance; }}调用:
CallLoginBean call= (CallLoginBean)JSONTOBean.getInstance().JSONTOBean(response,CallLoginBean.class);CallLoginBean就用完整的返回JSON生成
将每个接口返回的数据单独生成一个callbean文件即可
如果是只有一个单独值,请直接拿json字符串操作
有什么问题还请各大网友指出...
11/3优化一下,有部分情况直接返回一个没有key的jsonarray会导致Gson解析异常
这里添加一个type类型解析可以完成解析
在JSONTOBean里添加一个type解析方法
public Object JSONTOBean(ResponseBody body, Type type){ Object obj=null; try { String json = new String(body.bytes()); Gson gson =new Gson(); obj=gson.fromJson(json,type); } catch (IOException e) { e.printStackTrace(); } return obj;}调用
Type listType = new TypeToken<List<CallDataAnalysisBean>>() {}.getType();call= (List<CallDataAnalysisBean>) JSONTOBean.getInstance().JSONTOBean(response,listType);
阅读全文
0 0
- retrofit数据返回类型不统一解析方法
- Retrofit不进行Json解析,直接返回Json String
- 关于Retrofit返回错误信息的统一解决办法
- 解决retrofit+okhttp+rx框架返回数据解析异常
- 在retrofit访问网络返回json数据添加解析器
- msubstr返回格式不统一
- Retrofit 解析 JSON 数据
- .net调用DLL,返回不固定“结构”类型数据的方法
- ajax中解析json数据的各种方法(返回类型为json或text)
- LINQ to Entities统一数据存取方法解析(非原创)
- Android 使用Retrofit自定义Converter解析相同接口返回不同数据
- C++11 理解 (二十八) 之 用于计算函数对象返回类型的统一方法
- 使用Gson解析Retrofit返回结果
- mybatis返回map类型数据空值字段不显示
- hibernate分页返回数据,类型不匹配报错
- mybatis返回map类型数据空值字段不显示
- java中方法可以不写返回类型吗?
- retrofit请求返回的数据总是走onFailure方法原因之一
- 多元函数的泰勒(Taylor)展开式
- 工业物联网提高了全球的工厂生产效率
- JavEE 报错compiler level does not match the version of the installed java project facet解决方法
- CPU对存储器的读写
- java.sql.SQLException: null, message from server: “Host ‘xxx’ is not allowed to connect
- retrofit数据返回类型不统一解析方法
- NetworkUtil
- LeetCode-Remove Duplicates from Sorted Array
- LA 3415 Guardian of Decency (二分图最大独立集)
- CSS 伪元素选择器
- 提高MySQL性能的7个技巧
- ajax的文件上传
- Switch推出自己的数据中心标准
- caffe python layer