??一個典型的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) {
}
});
??我們知道如果成功我們可以從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();
}
}
}
??好了,現在打印出來的就是body了,注意是errorBody.string而不是errorBody.toString,不然它打印出來的只是地址。現在可用Gson等等各種方法了。
??自己搭了個博客,歡迎訪問,該文章的地址為:http://djjowfy.com/2016/04/29/當使用retrofit+Rxjava時,如何得到非200響應的body/