【问题标题】:Program stuck in socketRead0 method when requesting with OkHttp使用 OkHttp 请求时程序卡在 socketRead0 方法中
【发布时间】:2020-12-26 04:50:59
【问题描述】:

我使用 OkHttp3 4.8.1 为 Twitter API here 开发了一个 Java 库。 不幸的是,看起来在发送请求后,一旦一切完成,程序就永远不会停止并卡在SocketInputStream

当不使用缓存时,它会卡在Reference类的waitForReferencePendingList方法中:

我尝试了一切,在我的代码中明确关闭连接,如this,更新 OkHttp 的版本,但仍然相同。有什么想法吗?

如果需要,here 是完成请求的完整代码,总结如下:

      Request request = new Request.Builder()
          .url(url)
          .get()
          .headers(Headers.of("Authorization", "Bearer " + bearerToken))
          .build();
      OkHttpClient client     = new OkHttpClient.Builder().build()
      Response response       = client.newCall(request).execute();
      String   stringResponse = response.body().string();
      return Optional.ofNullable(TwitterClient.OBJECT_MAPPER.readValue(stringResponse, classType));


【问题讨论】:

  • 是否有一个具有主要方法或类似方法的类可以显示实际问题?项目中的测试通过了吗?有没有特别的问题url?
  • 调用 Response 对象的 close() 方法有什么变化吗?
  • @YuriSchimke 在单元测试中一切正常,看起来他们强制程序关闭。我的主要课程在另一个项目中,但它除了调用一个端点,如User user = new TwitterClient().getUserFromUserName("RedouaneBali");
  • @rmunge 在调用 close() 时没有任何变化,唯一的变化是在使用或不使用缓存的情况下发出请求,但在这两种情况下程序都卡住了。

标签: java twitter connection okhttp


【解决方案1】:

最后在别处添加client.connectionPool().evictAll();(在我的帖子请求中获取不记名令牌)解决了问题!

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 1970-01-01
    • 2021-08-24
    • 2019-05-07
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    相关资源
    最近更新 更多