title: OKHttp throwing an illegal state exception when I try to log the network response
body: <p>I put the following interceptor on my OkHttp client:</p>
  
  <pre><code>httpClient.addInterceptor(new Interceptor() {
      @Override
      public Response intercept(Chain chain) throws IOException {
          Response response = chain.proceed(chain.request());
          Log.d("Response", response.body().string());
          return response;
      }
      });
  </code></pre>
  
  <p>However, this isn't playing nice with Retrofit 2. It seems that you can only read the stream from the response once and that might be what is causing the exception. I'm thinking retrofit is trying to parse the stream which the log already parsed. How then do I get my hands on the response? I'm currently trying to debug a very nasty and strange malformed json exception.</p>
  
  <p>This is the exception stack trace:</p>
  
  <pre><code>07 - 28 10: 58: 21.575 22401 - 22529 / REDACTED E / AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
      Process: REDACTED, PID: 22401
      java.lang.IllegalStateException: closed
      at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java: 378)
      at okio.Buffer.writeAll(Buffer.java: 956)
      at okio.RealBufferedSource.readByteArray(RealBufferedSource.java: 92)
      at okhttp3.ResponseBody.bytes(ResponseBody.java: 83)
      at okhttp3.ResponseBody.string(ResponseBody.java: 109)
      at REDACTED.ServiceGenerator$2.intercept(ServiceGenerator.java: 90)
      at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java: 187)
      at REDACTED.ServiceGenerator$2.intercept(ServiceGenerator.java: 89)
      at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java: 187)
      at REDACTED.ServiceGenerator$2.intercept(ServiceGenerator.java: 89)
      at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java: 187)
      at REDACTED.ServiceGenerator$2.intercept(ServiceGenerator.java: 89)
      at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java: 187)
      at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java: 160)
      at okhttp3.RealCall.access$100(RealCall.java: 30)
      at okhttp3.RealCall$AsyncCall.execute(RealCall.java: 127)
      at okhttp3.internal.NamedRunnable.run(NamedRunnable.java: 32)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1112)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 587)
      at java.lang.Thread.run(Thread.java: 841)
  </code></pre>
  
  <p>I see that there are multiple interceptors in the stack but I only ever explicitly add the one, which is the on that is throwing the exception.</p>