Android Retrofit2网络请求异常,获取失败的内容

最近由于项目需求和服务器修改,需要捕捉http返回失败返回的值,然后根据里面失败的code做token失效的提示。

由于项目的网络请求使用的是Retrofit2+OKHttp+Rxjav2框架,比如下面我直接请求的话,服务器返回的Status:401,按照常规来说,我们只要拿到网络请求返回值然后根据code判断就可以。


Android Retrofit2网络请求异常,获取失败的内容_第1张图片
请求.png

但是一看logcat,什么鬼!!直接异常,根本不走我们正常的回调。

retrofit2.adapter.rxjava2.HttpException: HTTP 401

一般来说我们配合rxjava写回调都是这样的:


Android Retrofit2网络请求异常,获取失败的内容_第2张图片
代码回调方法.png

看下面的log,不管服务器返回的值是什么,它始终都是走了error方法。此时我是无法得到服务返回值的。然后我测试了好几次,只要服务器返回的Status不为200的话,我们这个方法都是直接onError的,导致我一直获取不到服务器给我返回的值。


logcat.png

解决方法:
拿到回调onError,Throwable的实例e去获取返回值:方法如下图
ResponseBody responseBody = ((HttpException) e).response().errorBody();
Android Retrofit2网络请求异常,获取失败的内容_第3张图片
处理失败网络异常返回值.png

这时的responseBody.string();就是服务器给你返回值。不管服务抛出500、404,还是其他值,你都可以以获取到了。
responseBody.string()返回是的String类型的数据。然后你需要解析之后才能用。

你可能感兴趣的:(Android Retrofit2网络请求异常,获取失败的内容)