2015-09-18 77 views
1

我有這個應用程序,我使用OkHttp RequestBody來執行與身體的網絡請求,但返回的內容長度是明顯錯誤的。由於問題的一個例子,有這樣的情況:OkHttp RequestBody返回錯誤的內容長度

public static RequestBody createNewTokenBody(final String redirectUri, final String 
     code, 
              final String clientId, final String 
                clientSecret) { 

    final byte[] requestBody = "bunchofcharsthatshouldgointhebody".getBytes(Charset.forName("UTF-8")); 

    final RequestBody ret = RequestBody.create(MediaType.parse(MEDIA_TYPE), requestBody, 0, 
      requestBody.length); 

    try { 
     Log.d("debug", "Request body length to return: " + ret.contentLength()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return ret; 
} 

因此,這將打印「請求車身長度返回:33」。 然而,當該主體被附接到該請求到由下面的攔截器捕獲:

client.networkInterceptors().add(new Interceptor() { 
     @Override 
     public Response intercept(final Chain chain) throws IOException { 
      final Request request = chain.request(); 

      final RequestBody body = request.body(); 
      if (body != null) { 
       Log.d("debug", "REQUEST BODY LENGTH: " + body.contentLength()); 
      } 

      return chain.proceed(request); 
     } 
    }); 

「REQUEST身長度:2」 被記錄代替,而不管指定我內容。毋庸置疑,由於身體未被完全閱讀,這完全無法滿足要求。有人知道這種行爲背後的原因嗎?

回答

0

如果將來需要引用它,則會將其報告爲Retrofit-2 beta1中的錯誤,並且已在當前快照中修復。

https://github.com/square/retrofit/issues/1097

+0

我鋼是-1 ...我使用編譯'com.squareup.okhttp:okhttp:2.4.0' –

1

我無法在獨立測試用例中重現此操作。如果可以的話,請用最小的可執行測試用例來報告針對OkHttp的錯誤,以證明問題。

+0

https://github.com/square/okhttp/issues/1864感謝。 –