HttpLoggingInterceptor(OkHttp3)为每个请求记录了很多次

时间:2016-10-17 14:06:37

标签: android logging interceptor retrofit2 okhttp3

我正在尝试使用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

哪个可能是问题?有帮助吗? 感谢

2 个答案:

答案 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。也许,你添加几个记录器而不是一个