我在一个大项目中使用Retrofit 1.9并且必须检查响应头中的一些数据,即使调用失败 - 例如分析请求代码。我们已经知道异步调用的结构:
RestClient.get().asyncRequest(requestParams, new Callback<GenericResponse>() {
@Override
public void success(MyPojo pojo, Response response) {
//we can use pojo object or use whole response
}
@Override
public void failure(RetrofitError error) {
//we can handle only error but NOT response
}
});
我们如何在这两种情况下分析响应?
一种解决方案是在创建Profiler
时使用RestAdapter
,如:
RestAdapter restAdapter = new RestAdapter.Builder()
//other stuff
.setProfiler(new Profiler() {
@Override
public Object beforeCall() {
return null;
}
@Override
public void afterCall(RequestInformation requestInfo, long elapsedTime, int statusCode, Object beforeCallData) {
//get what I need
}
})
.build();
但也许还有另一种解决方案可以在failure()
方法中获得响应。任何建议都会被贬低!
答案 0 :(得分:1)
您可以从RetrofitError
获取响应正文。
@Override
public void failure(RetrofitError error) {
//here you get your response
Response response = error.getResponse();
//use data from response
int code = response.getStatus();
List<Header> = response.getHeaders();
// ...
}
答案 1 :(得分:0)
我认为这将解决您的问题
RestAdapter restAdapter = new RestAdapter.Builder()
//other stuff
.setProfiler(new Profiler() {
@Override
public Object beforeCall() {
return null;
}
@Override
public void afterCall(RequestInformation requestInfo, long elapsedTime, int statusCode, Object beforeCallData) {
//get what I need
}
})
.setLogLevel(RestAdapter.LogLevel.FULL).build();
现在你可以得到回复
public void failure(RetrofitError error) {
String json = new String(((TypedByteArray)error.getResponse().getBody()).getBytes());
Log.v("failure", json.toString());
}
答案 2 :(得分:0)
改造中的故障方法只告诉发生错误,如果想要在改造时检查错误方法的参数,或者如果要在失败时再次调用,则可以再次调用该服务。