ProblemClone Retrofit 2 Response-Objekt in Interceptor
Ich möchte Benutzerdefinierte Interceptor verwenden, um Daten zu fangen, bevor es zu onResponse
in Code sendet. Das ist mein Interceptor
Code:
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
try {
Response response = chain.proceed(request);
Response savedResponse = response.newBuilder().build();
if (savedResponse.isSuccessful()){
String result = savedResponse.body().string();
ApiInterceptor apiInterceptor = new Gson().fromJson(result, ApiInterceptor.class);
Log.i("hieu", "");
if (activity != null){
if (apiInterceptor.getApi_result() != null){
if (apiInterceptor.getApi_result().getMainte() == AppConstants.MAINTENANCE_CODE){
// show maintenance activity
}else{
if (apiInterceptor.getApi_result().getTransfer_status() == AppConstants.TRANSFERING_CODE){
// hien thi man hinh chuyen doi
}else{
if (apiInterceptor.getApi_result().getOnly_payment_status() == AppConstants.ONLY_PAYMENT_CODE){
// hien thi man hinh qua han
}else{
if (apiInterceptor.getApi_result().getResult() != 0){
showMessage(apiInterceptor.getApi_result().getMessage());
}else{
// normal
}
}
}
}
}
}
}else{
showMessage(savedResponse.message());
}
return savedResponse;
}catch (Exception e){
LogUtils.d(SettingInterceptor.this.getClass().getName(), e.getMessage());
if (activity != null)
showMessage(activity.getString(R.string.network_error));
throw e;
}
}
Da ich weiß, dass ich nur nur 1 Zeit bis zum Ansprechen nach chain.proceed
zugreifen, ich mag, dass die Antwort klonen, so kann ich auf und verarbeiten mehr als 1 Mal mit dieser Antwort. So habe ich
Response savedResponse = response.newBuilder().build();
Aber wenn ich auf den Debug-Modus laufen, dieser Code mehr als 1 Mal ausgeführt.
Zum ersten Mal, result
kehrt richtige JSON-Daten. Nach dem Debug-Zeile wieder bei Response savedResponse = response.newBuilder().build();
und savedResponse.isSuccessful() return success
begann laufen zu return savedResponse;
laufen, aber result
leeren String zurück.
Wie es zu beheben? Vielen Dank.
Können Sie mehr erklären? Wofür brauche ich einen Rückruf und wo kann ich meinen Code einfügen? Weil ich denke, Code im Interceptor ist sequentiell. – TruongHieu
Warum möchten Sie die Antwort mehr als 1 Mal verarbeiten? –
Entschuldigung. Ich denke ich beschreibe das Problem nicht rein. Ist Programm mehr als 1, nicht was ich will, Herr. Es läuft mehrere Male und ab dem 2. Mal gibt es eine leere Zeichenfolge zurück. – TruongHieu