Ich versuche, diese Abfangjäger für die Authentifizierung zu verwenden:Android - OkHttp Interceptor - Antwort bereits "verbraucht"
public class CustomInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// try the request
Response response = chain.proceed(request);
if (response shows expired token) {
// get a new token (I use a synchronous Retrofit call)
// create a new request and modify it accordingly using the new token
Request newRequest = request.newBuilder()...build();
// retry the request
return chain.proceed(newRequest);
}
// otherwise just pass the original response on
return response;
}
Das Problem ist, dass mein Scheck (Antwort abgelaufen Token zeigt) ist zustandsbezogene, I muss die tatsächliche Antwort (Körperinhalt) überprüfen. Also nach der Überprüfung wird die Antwort "konsumiert" und jeder Versuch, den Körper vorzubereiten, wird fehlschlagen.
Ich habe versucht, zu „klonen“ der Antwortpuffer vor lesen, wie:
public static String responseAsString(Response response){
Buffer clonedBuffer = response.body().source().buffer().clone();
return ByteString.of(clonedBuffer.readByteArray()).toString();
}
, aber es funktioniert nicht, ist der clonedBuffer leer. Jede Hilfe wird geschätzt.
vielen Dank! gelöst :) – aw4y
Vielleicht MediaType contentType = ** Antwort **. body(). contentType() ;? –
Danke für ResponseBody.create (contentType, bodyString); – Harry