retrofit+Rxjava取得状态码非200(出现错误)时的response里的body

原创 2018年04月17日 08:22:46

一个典型的retrofit+Rxjava的网络请求如下

Subscription subscription = videoChartService.login(newBody)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(application.defaultSubscribeScheduler())
                .subscribe(new Subscriber<LoginResponse>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable error) {
                    }

                    @Override
                    public void onNext(LoginResponse loginResponse) {
                    }
                });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

我们知道如果成功我们可以从onNext里的Response里面来取出返回来的body。但是如果失败了,如何取出返回来的body呢??

根据文档,失败后会进入onError里面。但这个只是个Throwable类,如果直接tostring的话,我们可以看见它是只打印类返回的头部。所以看看能否向下转型,然后取出body。

这时我们故意发送一个失败请求,可以看见,打印出来的异常是

retrofit.HttpException

所以现在我们对它进行向下转型,onError里面代码如下:

@Override
public void onError(Throwable e) {
  if(e instanceof HttpException){
     ResponseBody body = ((HttpException) e).response().errorBody();
     try {
                MyLog.Error(body.string());
          } catch (IOException IOe) {
                IOe.printStackTrace();
          }
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

好了,现在打印出来的就是body了,注意是errorBody.string而不是errorBody.toString,不然它打印出来的只是地址。现在可用Gson等等各种方法了。 

在retrofit+Rxjava中如何取得状态码非200(出现错误)时的response里的body

一个典型的retrofit+Rxjava的网络请求如下Subscription subscription = videoChartService.login(newBody) ...
  • djjowfy
  • djjowfy
  • 2016-04-29 13:51:13
  • 3477

【SHELL】统计Nginx访问日志状态码

######################################################################### # File Name: check_nginx_s...
  • qq_15974389
  • qq_15974389
  • 2016-05-30 11:29:11
  • 1909

WebSocket 打开链接返回200错误,谁知道是什么问题吗?

我服务端是IIS 10 用了Owin.WebSocket
  • sibo6738
  • sibo6738
  • 2017-01-01 02:58:45
  • 2448

http协议的状态码 200、301、304、404、502 HTTP状态码解释

在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于...
  • xianyu410725
  • xianyu410725
  • 2015-03-16 11:22:14
  • 5144

jquery ajax调用springmvc status是200 回调返回error函数

转载请注意出处:http://www.51zdd.com/jquery_ajax_error.html 如下一段jquery代码,可以调用到springmvc的controller,返回的状态码...
  • zcm101
  • zcm101
  • 2014-05-27 10:23:18
  • 2911

HTTP状态码对照表 HTTP response codes

HTTP状态码对照表 HTTP response codes 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态...
  • u010412301
  • u010412301
  • 2017-03-22 23:39:32
  • 1490

JAVA -- HttpServletResponse 的状态码含义及方法说明

主体介绍: javax.servlet.http 接口HttpServletResponse 所有Superinterfaces: ServletResponse 所有已知实现类: HttpServl...
  • u014470726
  • u014470726
  • 2014-04-22 21:47:55
  • 7536

跨域返回的错误提示信息

Google: XMLHttpRequest cannot load http://localhost:8080/spring01/user/test. No 'Access-Control-All...
  • yanfeng918
  • yanfeng918
  • 2015-01-09 18:11:34
  • 952

AJAX请求状态码返回200却跳到error的function

最近在搞公司的项目时,发现了一个神奇的问题,就是AJAX请求成功,却莫名其妙的不返回到success函数中,而是跳到了error函数中。公司的项目是ASP.NET,这个和用的什么语言没有多大关系,只要...
  • CuiXiaoBo521
  • CuiXiaoBo521
  • 2017-07-18 19:56:47
  • 1245

常见HTTP状态码(200、301、302、500等)解说

对seo优化工作者来说有个词不陌生,HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码。状态码的第一个数字代表了响应的五种状态之一。   1XX系列:指定客户端应相应的某些动作,代...
  • phpboke
  • phpboke
  • 2016-04-22 20:21:07
  • 1732
收藏助手
不良信息举报
您举报文章:retrofit+Rxjava取得状态码非200(出现错误)时的response里的body
举报原因:
原因补充:

(最多只允许输入30个字)