ho cercato di implementare un intercettore (OkHttp 3,2 & Retrofit 2) per la modifica della risposta JSON prima viene restituito come risposta. Il server che richiediamo dati restituisce dati diversi dipende dal successo o dall'errore e rende difficile mappare gli oggetti.Android Retrofit 2, le differenze tra addInterceptor & addNetworkInterceptor per l'editing risposte
Stavo cercando di farlo aggiungendo l'intercettore a Retrofit come NetworkInterceptor, tuttavia la stringa restituita non aveva alcun formato.
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
try {
final String responseString = new String(response.body().bytes());
LOGD("OkHttp-NET-Interceptor", "Response: " + responseString);
String newResponseString = editResponse(responseString);
LOGD("OkHttp-NET-Interceptor", "Response edited: " + newResponseString);
return response.newBuilder()
.body(ResponseBody.create(response.body().contentType(), newResponseString))
.build();
}catch (Exception ex){
return response;
}
}
responseString aveva una stringa senza qualsiasi formato comprensibile.
Dopo il passaggio al normale intercettore, la stringa aveva il formato a che era in grado di convertire in JSONObject.
Potrebbe dirmi qualcuno quali sono le differenze tra le risposte ?
perché questa riga nuova stringa (response.body(). Bytes()); restituiscono contenuti diversi?
Grazie per la tua spiegazione, mi dà un'idea di cosa fa ogni intercettore. Tuttavia, perché NetworkInterceptor non restituisce una stringa leggibile e il normale intercettore funziona? –
@Lechon Ho aggiunto altro alla mia risposta per provare a spiegare un po 'di più – roarster