0
jsonをサーバーから解析できないとき、私は状況を収集しようとします。 (LoggingInterceptor) しかし、私はエラーを収集する必要がある 'onFailure()'の値を取得できないようです。なぜならそれは 'Call'と 'Throwable'しか提供しないからです。どのように 'onFailure()'のサーバーから生データを取得するのですか?retrofit2 onFailure()内のresponseBodyを取得する
以下は私のコードです。
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
}
});
}
ありがとう!
はい、onResponse()は200-500のステータスコードで呼び出されます。ただし、ステータスコードが200でjsonの解析が失敗した場合は、onFailure()が呼び出されます。 –
次に、レスポンスモデルクラスを修正する必要があります。なぜあなたは応答が必要ですか? throwableオブジェクトを介してエラーを記録/報告できます。私はあなたがOnFailureのレスポンスオブジェクトを得ることはできないと思います、retrofit2.Callbackインターフェイスが定義されている方法です。 https://square.github.io/retrofit/2.x/retrofit/retrofit2/Callback.html – art
おそらくnixの 'if(response.errorBody()!= null)'だけです。 –