试图关闭OkHttp的响应但缺少AutoCloseable接口

时间:2016-10-24 15:21:18

标签: java android okhttp okhttp3

我为我的Android项目使用 OkHttp 网络库。

Gradle文件中的版本:compile 'com.squareup.okhttp:okhttp:2.7.5'

我遇到了内存泄漏问题,我发现我错误地使用了lib,因为我没有关闭通过调用得到的 ResponseBody 对象。

Okhttp's github page there is a doc that clarifies

"必须关闭响应正文。"

它还提供了一个示例,我应该如何操作(通过使用 AutoCloseable界面,使用try' s语法):

 Call call = client.newCall(request);
   try (Response response = call.execute()) {
     ... // Use the response.
   }

还有:

"这个类(ResponseBody)和Response都实现了Closeable。关闭响应只会关闭其响应主体。"

但是:

如果我尝试运行此代码,我得到了:

  

不兼容的类型。

     

必需:java.lang.AutoCloseable

     

找到:com.squareup.okhttp.Response

当我在项目中查找 com.squareup.okhttp.Response 的实现时,我可以清楚地看到Response没有实现任何接口。

HOWEVER PART2:

如果我在OkHttp的文档中查找Response,则有:

  

所有已实施的接口:可关闭,可自动关闭

概要

Doc说我可以使用AutoCloseable但是Response类没有实现AutoCloseable。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

您链接的文档适用于版本3.甚至包含不同的包和maven组。如果可以,请升级到版本3.4.1,看看它是否解决了您的问题。

https://github.com/square/okhttp

compile 'com.squareup.okhttp3:okhttp:3.4.1'

答案 1 :(得分:0)

真的很奇怪。 this页面上的javadoc表示它将实现AutoCloseable,但将此接口链接到Java6的api,因为它是Java7的一个功能,因此无法找到它。 当您查看Response.javaResponseBody.java的github中的代码时,您会看到它们只实现'可关闭'而不是'AutoCloseable'。