【问题标题】:HttpLoggingInterceptor (OkHttp3) logging a lot of times for each requestHttpLoggingInterceptor (OkHttp3) 为每个请求记录很多次
【发布时间】:2017-02-26 13:36:57
【问题描述】:

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

可能是什么问题?有什么帮助吗? 谢谢

【问题讨论】:

    标签: android logging interceptor retrofit2 okhttp3


    【解决方案1】:

    尝试将@Singleton 注解添加到 Dagger。也许,您添加了几个记录器而不是一个

    【讨论】:

    • 它已经是@Singleton 并且仍然过度记录... :(
    【解决方案2】:

    在此处找到答案(shahsurajk 于 2017 年 9 月 24 日发表评论的答案): https://github.com/square/retrofit/issues/12427

    我在一个拦截器本身中有一个 HTTPLogger 和 chain.proceed(..)。因此,假设 HTTPLogger 在内部也调用了 chain.proceed() 从而发出了两个请求,我添加了一个网络拦截器并将 HTTPLogger 移动到网络拦截器和我的自定义 apikey chain.proceed(...) 在其他拦截器中。这是一种魅力,API 仅在内部调用一次。因此,您需要寻找可能在内部调用 chain.proceed(..) 方法的代码。这提出了一个新的请求。

    对我来说,改变了:

    httpClient.addInterceptor(logging);
    

    到:

    httpClient.addNetworkInterceptor(logging);
    

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 2019-12-16
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2013-11-19
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多