我使用Retrofit 2.0.0
。這是建立我的HTTP客戶端Retrofit 2使用HttpLoggingInterceptor.Level.BODY在日誌中打印空響應主體
protected OkHttpClient getHttpClient(){
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(
chain -> {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder();
requestBuilder.header("Accept-Language", App.getInstance().getPrefs().getSelectedLanguage().toLowerCase());
requestBuilder.header("Accept-Encoding", "gzip");
if(API.this instanceof PrivateAPI){
LoginResponse loginResponse = AuthManager.getInstanse().getLoginResponse();
requestBuilder.header("Authorization", String.format("%s %s",
loginResponse.getTokenType(),
loginResponse.getAccessToken()));
}
requestBuilder.method(original.method(), original.body());
Request request = requestBuilder.build();
return chain.proceed(request);
});
if(BuildConfig.DEBUG){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(loggingInterceptor);
}
return builder.build();
}
代碼這裏是我如何使用它來初始化我的改造API接口:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(getGson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(getHttpClient())
.build();
apiService = retrofit.create(PrivateAPIInterface.class);
直到昨天我快滿日誌中logcat的,因爲它應該是。但突然之間,我開始在我的日誌中獲得空的答覆機構。因此,這裏是我現在得到日誌的例子:
D/OkHttp: --> GET http://MY_DOMAIN/utility/gaz?branchid=&phone=21919&customerid= HTTP/1.1
D/OkHttp: Accept-Language: hy
D/OkHttp: Accept-Encoding: gzip
D/OkHttp: Authorization: 0yXK65Go_hRPT32WIP4DAKjmzIaM0riSLlybHhusvwmYJSxTdTVBrkL5CaqopXgrOuNFL5xvR5uVwCbprWrxvfYTMJ1I_AUmd5TKdNL4ptkUrJuOy1kGiule_yveCFv0GbTiAXhYjdfynJICJEVWc54ibnIv_Q14dLpPuVle5IaRuHmza2Pavkrhzi42sfMsK0Qpxaueu8eRPysk6MP9WkTnSKYIAThuq3sHq8RGAnkaLBx
D/OkHttp: --> END GET
D/OkHttp: <-- 200 OK http://MY_DOMAIN/utility/gaz?branchid=&phone=21919&customerid= (394ms)
D/OkHttp: Content-Length: 8527
D/OkHttp: Content-Type: application/json; charset=utf-8
D/OkHttp: Server: Microsoft-IIS/7.5
D/OkHttp: X-Powered-By: ASP.NET
D/OkHttp: Date: Wed, 16 Mar 2016 12:30:37 GMT
D/OkHttp: OkHttp-Sent-Millis: 1458131438086
D/OkHttp: OkHttp-Received-Millis: 1458131438438
D/OkHttp: }
D/OkHttp: <-- END HTTP (8527-byte body)
正如你所看到的一切,我得到的,而不是響應體是D/OkHttp: }
。 但在郵差,我看到一個正常的響應身體,並在我的應用程序一切正常,所以問題只是與日誌記錄。
任何人都可以幫助我理解爲什麼會出現這種情況嗎?
P.S.如果請求具有正文,我會看到請求正文,問題只出現在回覆bodys上。
我有它 - 編譯「com.squareup.okht tp3:logging-interceptor:3.2.0',在我嘗試編譯'com.squareup.okhttp3:logging-interceptor:3.0.1'之前...它不起作用 – Andranik
您正在改造中傳遞'getHttpClient()'建設者。而不是你應該通過OkHttpClient(請參考我的答案的第3行)。我已經嘗試過,它給出了完整的日誌並且工作正常。 按照我發佈的方式使用它,您無需爲getHttpClient()創建函數。 –
getHttpClient()的功能與您所做的完全相同,但其中還包含額外的邏輯。無論如何,我試着按照你的建議,並沒有奏效。 – Andranik