【问题标题】:How to stop JSoup/OkHttpClient: A connection was leaked?如何停止 JSoup/OkHttpClient:连接泄露?
【发布时间】:2018-07-26 11:59:07
【问题描述】:

我的 Android 应用使用 Jsoup 连接网站

implementation group: 'org.jsoup', name: 'jsoup', version: '1.11.2'

我的 logcat 有这些消息

OkHttpClient: A connection to http://www.xxx.yyy.zzz/ was leaked. Did you forget to close a response body?

我的 jsoup 连接类似于:-

final Document feedNavigator = Jsoup.connect(uri.toString()).referrer(JSOUP_REFERRER).userAgent(USER_AGENT).followRedirects(true).ignoreContentType(true).ignoreHttpErrors(true).maxBodySize(JSOUP_MAX_BODY_SIZE).timeout(JSOUP_TIMEOUT).get();

我的印象是 jsoup 自己处理资源。

为什么我会收到这些 logcat 警告?

我该如何解决这个泄漏?

【问题讨论】:

  • 不是因为jsoup,是因为okHttp。
  • 我的应用程序使用的唯一第三方库是 Jsoup。使用okhttp的一定是Jsoup。
  • 这应该在最新版本中修复。交叉检查您是否使用最新的库
  • maven 存储库显示我正在使用的 jsoup 版本作为最新版本 mvnrepository.com/artifact/org.jsoup/jsoup/1.11.2
  • 那么可能是jsoup中的一个错误。

标签: android jsoup okhttp


【解决方案1】:

在 Kotlin 中我是这样使用的:

try {
                val req: Request = Request.Builder().url(url).get().build()
                val client = OkHttpClient()
                val resp: Response = client.newCall(req).execute()
                val code: Int = resp.code() // can be any value
                body= resp.body()
                if (code == 200) {
                    body?.close() // I close it explicitly
                }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2019-04-18
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多