Retrofit+RxJava網(wǎng)絡(luò)請(qǐng)求失敗后,獲取返回的錯(cuò)誤信息(json字符串)

使用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é)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容