我使用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