我在我的安卓项目中使用了OkHttp网络库。
Gradle文件中的版本:compile 'com.squareup.okhttp:okhttp:2.7.5'
我有一个内存泄漏问题,我发现我使用的lib不正确,因为我没有关闭从调用中获得的ResponseBody对象。
“回应机构必须关闭。”
本文还举例说明了如何做到这一点(通过使用AutoCloseable接口和try的语法):
Call call = client.newCall(request);
try (Response response = call.execute()) {
... // Use the response.
}还包括:
“这个类(ResponseBody)和响应都是可关闭的。关闭响应只会关闭它的响应体。”
然而,:
如果我试图运行这段代码,我得到:
不兼容的类型。 所需: java.lang.AutoCloseable 发现: com.squareup.okhttp.Response
当我在我的项目中查找com.squareup.okhttp.Response's实现时,我清楚地看到响应没有实现任何接口。
然而, PART2:
如果我在OkHttp的文档中查找响应,就会发现:
所有实现的接口:可关闭的,AutoCloseable
摘要:
Doc说我可以使用AutoCloseable,但是响应类不能实现AutoCloseable。
我遗漏了什么?
发布于 2016-10-25 07:11:14
您链接到的文档用于版本3,它甚至有一个不同的包和maven组。如果可以的话,升级到3.4.1版本,看看它是否解决了问题。
https://github.com/square/okhttp
compile 'com.squareup.okhttp3:okhttp:3.4.1'发布于 2016-10-24 15:46:50
真的很奇怪。这页面上的javadoc表示它将实现AutoCloseable,但是将这个接口链接到Java6的api,在那里找不到它,因为它是Java7的一个特性。当您查看Response.java或ResponseBody.java的github中的代码时,您会发现它们只实现了“Closeable”,而没有实现“AutoCloseable”。
https://stackoverflow.com/questions/40221999
复制相似问题