使用Retrofit+RxJava網(wǎng)絡(luò)框架進(jìn)行網(wǎng)絡(luò)請(qǐng)求,對(duì)網(wǎng)絡(luò)請(qǐng)求的結(jié)果進(jìn)行處理需要實(shí)現(xiàn)三個(gè)方法onCompleted()
,onError(Throwable e),onNext(String responseString),我這邊請(qǐng)求成功后的統(tǒng)一處理操作(code為200),直接接受String,
如果失敗的話,同時(shí)后臺(tái)又傳過來一個(gè)json字符串怎么處理呢?例如這樣:

這是用postman(網(wǎng)頁(yè)調(diào)試與發(fā)送網(wǎng)頁(yè)HTTP請(qǐng)求的Chrome插件)請(qǐng)求后返回的json,那么如何拿到這個(gè)json呢?
今天我要解決的就是拿到j(luò)son這個(gè)問題,比如說登陸的時(shí)候,后臺(tái)code碼返回不規(guī)范,那么我們就需要根據(jù)msg的提示信息來提醒用戶如何準(zhǔn)確的登錄,當(dāng)然這更利于我們進(jìn)行l(wèi)ogcat。
我說一下怎么拿到這個(gè)json字符串,首先這個(gè)網(wǎng)絡(luò)請(qǐng)求返回的結(jié)果肯定是到了onError()里面了,在onError()方法里返回了一個(gè)Throwable
對(duì)象,首先判斷這個(gè)Throwable對(duì)象是否屬于HttpException(retrofit2.adapter.rxjava包下),為什么要先判斷呢,因?yàn)榫退闶莏son解析異常也會(huì)走到onError()這個(gè)方法里面,在HttpException中有code,message,response,message的解釋是HTTP status message,也就是網(wǎng)絡(luò)請(qǐng)求狀態(tài)的信息,那和code差不多了,重要的事response,這是一個(gè)Response對(duì)象,這個(gè)對(duì)象里面有一個(gè)ResponseBody對(duì)象,也就是errorBody,ResponseBody
類中有個(gè)string()方法,就是這個(gè)方法,可以直接輸出完咯請(qǐng)求失敗情況下返回的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é)束。