我正在尝试使用Retrofit2和OkHttp3做一些请求,并使用HttpLoggingInterceptor拦截它们。我正在使用Dagger注入OkHttp客户端..并且一切正常但是当我向我的服务器发出请求时,我可以看到请求和响应记录在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
哪个可能是问题?有帮助吗? 感谢
答案 0 :(得分:1)
在这里找到答案(2017年9月24日评论的shahsurajk答案): https://github.com/square/retrofit/issues/12427
我在一个拦截器本身中有一个HTTPLogger和chain.proceed(..)。所以假设HTTPLogger内部也调用了chain.proceed(),因此发出了两个请求,我添加了一个networkinterceptor并将HTTPLogger移动到网络拦截器和我的自定义apikey chain.proceed(...)在其他拦截器中。这是一个魅力,API只在内部调用一次。因此,您需要查找可能在内部调用chain.proceed(..)方法的代码。这提出了一个新的要求。
对我来说,改变了:
httpClient.addInterceptor(logging);
为:
httpClient.addNetworkInterceptor(logging);
答案 1 :(得分:0)
尝试将@Singleton注释添加到Dagger。也许,你添加几个记录器而不是一个