在使用Retrofit2过程中会遇到一些奇奇怪怪的问题,特此记录一下。
Delete不支持body
在一个删除接口遇到一个异常崩溃报错信息:
IllegalArgumentException: Non-body HTTP method cannot contain @Body.
原因是使用Retrofit2中Delete方法不支持@Body,直接把@DELETE改成这样就好了:
@HTTP(method = "DELETE",path = HttpApi.URL_Quick_Delete,hasBody = true)
onError方法无信息返回
一个接口返回直接走了onError方法,debug后如下:
使用postman如下
在请求返回Status非200时直接走了onError方法,返回数据只有一个Throwable对象,但有时候服务器返回信息里还包含一些重要信息,例如上面图中的msg字段需要toast弹出提示,所以要获取到里面信息,要么让后台返回status为200,通过判断其他字段如success判断成功失败,要么通过以下代码获取异常中的信息:
if (e instanceof HttpException) {
ResponseBody body = ((HttpException) e).response().errorBody();
try {
Log.e(TAG, "onFail---" + bean.getMsg());
} catch (IOException e1) {
e1.printStackTrace();
}
return;
}
当然,这种问题其实是服务器后台失误,网络请求成功并且需要返回数据,肯定是不能把状态码作为错误处理的。