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

Trying to close OkHttp's Response but AutoCloseable interface is missing

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

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

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

Okhttp's github page there is a doc that clarifies

"The response body must be closed."

它还给出了我应该如何操作的示例(通过使用 AutoCloseable 接口和 try 语法):

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

还有:

"Both this class (ResponseBody) and Response implement Closeable. Closing a response simply closes its response body."

但是:

如果我尝试 运行 我得到的代码:

Incompatible types.

Required: java.lang.AutoCloseable

Found: com.squareup.okhttp.Response

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

但是第 2 部分:

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

All Implemented Interfaces: Closeable, AutoCloseable

摘要:

文档说我可以使用 AutoCloseable,但 Response class 没有实现 AutoCloseable。

我错过了什么?

真是奇怪。 this 页面上的 javadoc 说它将实现 AutoCloseable,但将此接口链接到 Java6 的 api,但在那里找不到它,因为它是 Java7 的一个功能。 当您查看 Response.java or ResponseBody.java 的 github 中的代码时,您会发现它们只实现了 'Closeable' 而不是 'AutoCloseable'.

您 link 的文档是针对版本 3 的。它甚至有不同的包和 maven 组。如果可以,请升级到版本 3.4.1,看看它是否能解决您的问题。

https://github.com/square/okhttp

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