最近由于項(xiàng)目需求和服務(wù)器修改,需要捕捉http返回失敗返回的值逐工,然后根據(jù)里面失敗的code做token失效的提示铡溪。
由于項(xiàng)目的網(wǎng)絡(luò)請(qǐng)求使用的是Retrofit2+OKHttp+Rxjav2框架,比如下面我直接請(qǐng)求的話泪喊,服務(wù)器返回的Status:401棕硫,按照常規(guī)來說,我們只要拿到網(wǎng)絡(luò)請(qǐng)求返回值然后根據(jù)code判斷就可以袒啼。
但是一看logcat哈扮,什么鬼!蚓再!直接異常滑肉,根本不走我們正常的回調(diào)。
retrofit2.adapter.rxjava2.HttpException: HTTP 401
一般來說我們配合rxjava寫回調(diào)都是這樣的:
看下面的log,不管服務(wù)器返回的值是什么摘仅,它始終都是走了error方法靶庙。此時(shí)我是無法得到服務(wù)返回值的。然后我測(cè)試了好幾次娃属,只要服務(wù)器返回的Status不為200的話六荒,我們這個(gè)方法都是直接onError的,導(dǎo)致我一直獲取不到服務(wù)器給我返回的值矾端。
解決方法:
拿到回調(diào)onError,Throwable的實(shí)例e去獲取返回值:方法如下圖
ResponseBody responseBody = ((HttpException) e).response().errorBody();
這時(shí)的responseBody.string();就是服務(wù)器給你返回值掏击。不管服務(wù)拋出500、404须床,還是其他值铐料,你都可以以獲取到了。
responseBody.string()返回是的String類型的數(shù)據(jù)豺旬。然后你需要解析之后才能用。