HttpLoggingInterceptor (OkHttp3) регистрирует много раз для каждого запроса

Я пытаюсь выполнить некоторые запросы, используя Retrofit2 и OkHttp3, и перехватываю их с помощью HttpLoggingInterceptor. Я внедряю клиент OkHttp с помощью Dagger... и все в порядке, но когда я просто делаю запрос на свой сервер, я вижу запрос и ответ, зарегистрированные в Logcat три или более раз, когда это должно быть только один раз..

Часть кода, где я устанавливаю перехватчик, выглядит так:

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
httpClient.addInterceptor(logging);

Пример результата Logcat только для ОДНОГО запроса:

D/OkHttp: --> GET http://date.jsontest.com/ http/1.1
D/OkHttp: Accept: application/json
D/OkHttp: --> END GET
D/OkHttp: --> GET http://date.jsontest.com/ http/1.1
D/OkHttp: Accept: application/json
D/OkHttp: --> END GET
D/OkHttp: --> GET http://date.jsontest.com/ http/1.1

В чем может быть проблема? Любая помощь? Спасибо


person Jaume Colom Ferrer    schedule 17.10.2016    source источник


Ответы (2)


Нашел ответ здесь (ответ shahsurajk, который прокомментировал 24 сентября 2017 г.): https://github.com/square/retrofit/issues/1242

У меня был HTTPLogger и chain.proceed(..) в одном перехватчике. Итак, предполагая, что HTTPLogger внутренне также вызывает chain.proceed(), который, таким образом, делает два запроса, я добавил сетевой перехватчик и переместил HTTPLogger в сетевой перехватчик, а мой собственный apikey chain.proceed(...) — в другой перехватчик. Это сработало как шарм, и API вызывался только один раз внутри. Таким образом, вам нужно искать код, который может вызвать метод chain.proceed(..) внутри. Что делает новый запрос.

Для меня работало изменение:

httpClient.addInterceptor(logging);

to:

httpClient.addNetworkInterceptor(logging);
person Zhebzhik Babich    schedule 10.05.2018

попробуйте добавить аннотацию @Singleton к Dagger. Возможно, вы добавляете несколько логгеров вместо одного

person Alex Shutov    schedule 17.10.2016
comment
Это уже как @Singleton, и он все еще перегружается... :( - person Jaume Colom Ferrer; 17.10.2016