Io uso Retrofit 2.0.0
. Questo è il codice che costruisce il mio cliente HTTPRetrofit 2 stampa il corpo di risposta vuoto nel registro con 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();
}
Ed ecco come lo uso per init mia Retrofit interfaccia API:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(getGson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(getHttpClient())
.build();
apiService = retrofit.create(PrivateAPIInterface.class);
Fino a ieri mi stavo log completo nel logcat come si suppone essere. Ma all'improvviso comincio a ottenere corpi di risposta vuoti nel mio registro. Quindi, ecco un esempio di registro ottengo ora:
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)
Come si può vedere tutto ricevo invece di corpo di risposta è D/OkHttp: }
. Ma in Postman vedo un normale corpo di risposta e nella mia app funziona tutto bene, quindi il problema riguarda solo la registrazione.
Qualcuno può aiutarmi a capire perché questo può iniziare a succedere?
P.S. In caso di richieste che hanno il corpo vedo il corpo della richiesta il problema è solo con gli organi di risposta.
ce l'ho - la compilazione 'com.squareup.okht tp3: logging-intercceptor: 3.2.0 ', prima ho provato a compilare' com.squareup.okhttp3: logging-intercettatore: 3.0.1 'anche ... non funziona – Andranik
Stai passando 'getHttpClient()' nel retrofit costruttore. Invece di ciò dovresti passare OkHttpClient (vedi la riga 3 della mia risposta). Ho provato questo dà registri completi e funziona bene. Usalo come ho postato non è necessario creare la funzione per getHttpClient(). –
getHttpClient() fa esattamente la stessa cosa che fai, ma ha anche una logica extra. Ad ogni modo, cerco il modo in cui mi hai suggerito e non ha funzionato. – Andranik