使用Retrofit+RxJava网络框架进行网络请求,对网络请求的结果进行处理需要实现三个方法onCompleted()
,onError(Throwable e),onNext(String responseString),我这边请求成功后的统一处理操作(code为200),直接接受String,
如果失败的话,同时后台又传过来一个json字符串怎么处理呢?例如这样:
这是用postman(网页调试与发送网页HTTP请求的Chrome插件)请求后返回的json,那么如何拿到这个json呢?
今天我要解决的就是拿到json这个问题,比如说登陆的时候,后台code码返回不规范,那么我们就需要根据msg的提示信息来提醒用户如何准确的登录,当然这更利于我们进行logcat。
我说一下怎么拿到这个json字符串,首先这个网络请求返回的结果肯定是到了onError()里面了,在onError()方法里返回了一个Throwable
对象,首先判断这个Throwable对象是否属于HttpException(retrofit2.adapter.rxjava包下),为什么要先判断呢,因为就算是json解析异常也会走到onError()这个方法里面,在HttpException中有code,message,response,message的解释是HTTP status message,也就是网络请求状态的信息,那和code差不多了,重要的事response,这是一个Response对象,这个对象里面有一个ResponseBody对象,也就是errorBody,ResponseBody
类中有个string()方法,就是这个方法,可以直接输出完咯请求失败情况下返回的json字符串。
代码:
@Override
public voidonError(Throwable e) {
if(e instanceof HttpException){
HttpException httpException = (HttpException) e;
try{
String responseString = httpException.response().errorBody().string();
}catch(IOException e1) {
e1.printStackTrace();
}
}
}
拿到responseString解析输出,结束。
网友评论