0
当我无法从服务器解析json时,我尝试收集情况。 (LoggingInterceptor) 但是,我似乎无法获得'onFailure()'中的值,这是我需要收集错误的一种情况。因为它只提供'Call'和'Throwable'。如何在'onFailure()'中从服务器获取原始数据?retrofit2在onFailure获得响应Body()
以下是我的代码。
LoggingInterceptor
public class LoggingInterceptor implements Interceptor {
//로그에 쓰일 tag
private static final String TAG = CalyApplication.class.getSimpleName() + "/" + LoggingInterceptor.class.getSimpleName();
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
Response response = chain.proceed(request);
long t2 = System.nanoTime();
String responseString = new String(response.body().bytes());
//yes, I can see response in here. but I need it in 'onFailure()'.
Logger.i(TAG, "code : " + response.code() + "\n" + responseString);
return response.newBuilder()
.body(ResponseBody.create(response.body().contentType(), responseString))
.build();
}
}
Actrivity
void fetchData(){
ApiClient.getService().test(
"test"
).enqueue(new Callback<BasicResponse>() {
@Override
public void onResponse(Call<BasicResponse> call, Response<BasicResponse> response) {
BasicResponse body = response.body();
switch (response.code()){
case 200:
break;
default:
break;
}
}
@Override
public void onFailure(Call<BasicResponse> call, Throwable t) {
//I want get Response object in here!
//but it only provides Call&Throwable
}
});
}
谢谢!
是的,在200-500状态码中调用onResponse()。但是,如果状态码是200并且json解析失败,则调用onFailure()。 –
然后你需要修复你的响应模型类。你为什么需要回应?您可以通过throwable对象记录/报告错误。我不认为你可以在OnFailure中获得响应对象,这就是retrofit2.Callback接口的定义方式。 https://square.github.io/retrofit/2.x/retrofit/retrofit2/Callback.html – art
大概nix'if(response.errorBody()!= null)'只是fyi。 –