retrofit rxjava+rxjava怎样动态解析json数据

每个App都避免不了要进行网络请求从最开始的用谷歌封装的volley到再到android-async-http再到OKHttpUtils再到现在的retrofit rxjava和RxJava,从我自己用后的体验来看,用了retrofit rxjava和RxJava真的回不去了回不去了,不去了去了,了...(哈哈本来还想分析下这四个的区别,网上这样的文章很多我就没必要多添乱了-.-)。不多逼逼下面开始正文。

 
你以为这样就行了 这样子确實没毛病,确实已经妥妥的了可是,可是事与愿违啊!!!
 
一般情况这是我们的返回json格式: 我们刚才定义登录接口的时候 返回的实体基类例传入的是UserInfoEntity 这确实是没问题的 可是你们加入登录失败的时候返回的json数据格式是这样的怎么办?
失败的时候返回的实体又是一个数组這样子就会抱一个json解析异常拿不多失败的状态码和提示信息
OK其实我们的网络请求已经完成90%了,剩下的就是不重要的失败的时候回调了
方法一:(这是在后台兄弟好说话,而且不打人的情况下...当然这种好人还是有的,不过这不是我们今天要讲的重点)
我们可以让后台返回嘚json数据中的result永远是个数组




那可能有人要问了,那我们不用这个用哪个啊不着急,不着急还好retrofit rxjava是支持自定义的ConverterFactory的
下面我们就开始我们嘚自定义征程吧。

1、自定义Gson响应体变换器
 


再然后最后一个然后啦(-.-)

这次是真的完成了我们的json数据解析异常的处理,其实我们的解决办法是解析了两次第一次解析的时候我们的Response中只有只是解析了最外层的 code 和 msg ,result中的是没有解析的response中的code==200,直接将数据解析到我们的实体基类Φ如果code!=200时,直接抛自定义的异常直接会回调到subscriber中的onError()中。虽然进行了两次解析但是第一次只是解析了code,和msg 对于效率的影响其实並不大在功能实现的基础上一点点效率的影响(而且这个影响是微乎其微的-.-)其实无伤大雅的。

我要回帖

更多关于 retrofit rxjava 的文章

 

随机推荐