我为我的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。
我错过了什么?
答案 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.java或ResponseBody.java的github中的代码时,您会看到它们只实现'可关闭'而不是'AutoCloseable'。