使用Retrofit+RxJava網(wǎng)絡(luò)框架進(jìn)行網(wǎng)絡(luò)請求蝶桶,對網(wǎng)絡(luò)請求的結(jié)果進(jìn)行處理需要實(shí)現(xiàn)三個方法onCompleted()
,onError(Throwable e)掉冶,onNext(String responseString)真竖,我這邊請求成功后的統(tǒng)一處理操作(code為200),直接接受String,
如果失敗的話厌小,同時后臺又傳過來一個json字符串怎么處理呢恢共?例如這樣:
這是用postman(網(wǎng)頁調(diào)試與發(fā)送網(wǎng)頁HTTP請求的Chrome插件)請求后返回的json,那么如何拿到這個json呢?
今天我要解決的就是拿到j(luò)son這個問題璧亚,比如說登陸的時候讨韭,后臺code碼返回不規(guī)范,那么我們就需要根據(jù)msg的提示信息來提醒用戶如何準(zhǔn)確的登錄,當(dāng)然這更利于我們進(jìn)行l(wèi)ogcat透硝。
我說一下怎么拿到這個json字符串狰闪,首先這個網(wǎng)絡(luò)請求返回的結(jié)果肯定是到了onError()里面了,在onError()方法里返回了一個Throwable
對象濒生,首先判斷這個Throwable對象是否屬于HttpException(retrofit2.adapter.rxjava包下)埋泵,為什么要先判斷呢,因?yàn)榫退闶莏son解析異常也會走到onError()這個方法里面甜攀,在HttpException中有code,message,response秋泄,message的解釋是HTTP status message琐馆,也就是網(wǎng)絡(luò)請求狀態(tài)的信息规阀,那和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解析輸出屠缭,結(jié)束箍鼓。