retrofit数据返回类型不统一解析方法

最新做的新项目里遇到接口返回类型不同一的情况没有按照默认格式返回,有点小头疼,这里自己写了个方法偷懒下

正常在开发的时候后台返回的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);



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值