试图关闭 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'
我为我的 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'