Android – OkHttp interceptor – Antwort schon "verbraucht"

Ich versuche, diesen Interceptor für die Authentifizierung zu verwenden:

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 zeigt abgelaufenes Token) nicht statusbezogen ist, muss ich die tatsächliche Antwort (Körperinhalt) überprüfen. Also nach dem Scheck ist die Antwort "verbraucht" und jeder Versuch, den Körper fertig zu machen, scheitert.

  • Holen Sie beide Sim-Nummern in einem Dual-SIM-Android-Handy
  • Android getActivity () ist undefiniert
  • Android, Scala und Proguard
  • Aktivitätserkennung in Android funktioniert nicht
  • Wie bekomme ich Lieblingsstern?
  • Holen Sie sich den Namen und die Postleitzahl von Google Place API auf Android
  • Ich habe versucht, den Antwortpuffer vor dem Lesen zu klonen, wie:

     public static String responseAsString(Response response ){ Buffer clonedBuffer = response.body().source().buffer().clone(); return ByteString.of(clonedBuffer.readByteArray()).toString(); } 

    Aber es funktioniert nicht, der clonedBuffer ist leer. Jede Hilfe wird geschätzt.

  • Android: Erstellen Sie eine einzelne Aufgabe mit mehreren Anwendungen 'Aktivitäten (Lauchmode Problem)
  • MediaCodec getInputImage return null auf Some Devices
  • Verwenden Sie SMS, um die Telefonnummer eines Geräts zu überprüfen
  • Android: Center Gridview horizontal
  • Zweite AsyncTask nicht ausgeführt
  • Was ist los mit meinem Code - Benachrichtigung - kein Ton kein Vibrieren
  • One Solution collect form web for “Android – OkHttp interceptor – Antwort schon "verbraucht"”

    Ich hatte gerade das gleiche Problem, und die Lösung, die ich fand, war, den Körper der Antwort zu verbrauchen und eine neue Antwort mit einem neuen Körper aufzubauen. Ich habe es so gemacht:

     ... Response response = chain.proceed(request); MediaType contentType = response.body().contentType(); String bodyString = response.body().string(); if (tokenExpired(bodyString)) { // your logic here... } ResponseBody body = ResponseBody.create(contentType, bodyString); return response.newBuilder().body(body).build(); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.