美文网首页Retrofit RXjava 网络框架安卓 解决方案
Retrofit+RxJava网络请求失败后,获取返回的错误信息

Retrofit+RxJava网络请求失败后,获取返回的错误信息

作者: 李梦秋shiny | 来源:发表于2017-05-27 16:46 被阅读80次

使用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解析输出,结束。

相关文章

网友评论

  • 啸林:找了好久,谢谢博主

本文标题:Retrofit+RxJava网络请求失败后,获取返回的错误信息

本文链接:https://www.haomeiwen.com/subject/queqfxtx.html