首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图关闭OkHttp的响应但是缺少AutoCloseable接口

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

Stack Overflow用户
提问于 2016-10-24 15:21:18
回答 2查看 2.2K关注 0票数 2

我在我的安卓项目中使用了OkHttp网络库。

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

我有一个内存泄漏问题,我发现我使用的lib不正确,因为我没有关闭从调用中获得的ResponseBody对象。

Okhttp的github页面有一个文档可以澄清

“回应机构必须关闭。”

本文还举例说明了如何做到这一点(通过使用AutoCloseable接口和try的语法):

代码语言:javascript
复制
 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。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-25 07:11:14

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

https://github.com/square/okhttp

代码语言:javascript
复制
compile 'com.squareup.okhttp3:okhttp:3.4.1'
票数 3
EN

Stack Overflow用户

发布于 2016-10-24 15:46:50

真的很奇怪。页面上的javadoc表示它将实现AutoCloseable,但是将这个接口链接到Java6的api,在那里找不到它,因为它是Java7的一个特性。当您查看Response.javaResponseBody.java的github中的代码时,您会发现它们只实现了“Closeable”,而没有实现“AutoCloseable”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40221999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档