zoukankan      html  css  js  c++  java
  • 在retrofit+Rxjava中如何取得状态码非200(出现错误)时的response里的body

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

     1 Subscription subscription = videoChartService.login(newBody)
     2                 .observeOn(AndroidSchedulers.mainThread())
     3                 .subscribeOn(application.defaultSubscribeScheduler())
     4                 .subscribe(new Subscriber<LoginResponse>() {
     5                     @Override
     6                     public void onCompleted() {
     7                     }
     8 
     9                     @Override
    10                     public void onError(Throwable error) {
    11                     }
    12 
    13                     @Override
    14                     public void onNext(LoginResponse loginResponse) {
    15                     }
    16                 });

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

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

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

    retrofit.HttpException

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

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

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

    转载地址:http://djjowfy.com/2016/04/29/当使用retrofit+Rxjava时,如何得到非200响应的body/

  • 相关阅读:
    (十六)字段表集合
    (十五)类索引
    (十四)访问标志 Access_flags
    (一)单例模式
    (二十三)IDEA 构建一个springboot工程,以及可能遇到的问题
    (十三)class文件结构:常量池(转)
    Hive优化
    标签整理
    一些学习资料
    jstree树形菜单
  • 原文地址:https://www.cnblogs.com/fuyaozhishang/p/8607706.html
Copyright © 2011-2022 走看看