??一個(gè)典型的retrofit+Rxjava的網(wǎng)絡(luò)請(qǐng)求如下
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里面來(lái)取出返回來(lái)的body坎拐。但是如果失敗了圆丹,如何取出返回來(lái)的body呢涂佃?脐恩?
??根據(jù)文檔废菱,失敗后會(huì)進(jìn)入onError里面咖刃。但這個(gè)只是個(gè)Throwable類差油,如果直接tostring的話拗军,我們可以看見它是只打印類返回的頭部。所以看看能否向下轉(zhuǎn)型蓄喇,然后取出body发侵。
??這時(shí)我們故意發(fā)送一個(gè)失敗請(qǐng)求,可以看見妆偏,打印出來(lái)的異常是
retrofit.HttpException
??所以現(xiàn)在我們對(duì)它進(jìn)行向下轉(zhuǎn)型刃鳄,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();
}
}
}
??好了,現(xiàn)在打印出來(lái)的就是body了钱骂,注意是errorBody.string而不是errorBody.toString叔锐,不然它打印出來(lái)的只是地址∨才簦現(xiàn)在可用Gson等等各種方法了。
??自己搭了個(gè)博客愉烙,歡迎訪問(wèn)狰住,該文章的地址為:http://djjowfy.com/2016/04/29/當(dāng)使用retrofit+Rxjava時(shí),如何得到非200響應(yīng)的body/