最近由于项目需求和服务器修改,需要捕捉http返回失败返回的值,然后根据里面失败的code做token失效的提示。
由于项目的网络请求使用的是Retrofit2+OKHttp+Rxjav2框架,比如下面我直接请求的话,服务器返回的Status:401,按照常规来说,我们只要拿到网络请求返回值然后根据code判断就可以。
请求.png
但是一看logcat,什么鬼!!直接异常,根本不走我们正常的回调。
retrofit2.adapter.rxjava2.HttpException: HTTP 401
一般来说我们配合rxjava写回调都是这样的:
代码回调方法.png
看下面的log,不管服务器返回的值是什么,它始终都是走了error方法。此时我是无法得到服务返回值的。然后我测试了好几次,只要服务器返回的Status不为200的话,我们这个方法都是直接onError的,导致我一直获取不到服务器给我返回的值。
logcat.png
解决方法:
拿到回调onError,Throwable的实例e去获取返回值:方法如下图
ResponseBody responseBody = ((HttpException) e).response().errorBody();
处理失败网络异常返回值.png
这时的responseBody.string();就是服务器给你返回值。不管服务抛出500、404,还是其他值,你都可以以获取到了。
responseBody.string()返回是的String类型的数据。然后你需要解析之后才能用。
网友评论