Okhttp4,无法访问 'body':它在 'Response' 中是包私有的

Okhttp4, Cannot access 'body': it is package-private in 'Response'

我正在从 okhttp 3.14 迁移到 okhttp4,根据迁移指南,当替换 "response.body()?""response.body?"[ 的调用时=22=] IDE 在代码的最后一行显示错误“无法访问 'body':它在 'Response' 中是包私有的”

val request = Request.Builder().url(url).build()
        val response = coreNetwork.getOkHttp().newCall(request).execute()
        val stream = response.body?.source()?.inputStream()

如果我正在尝试 "response.body()?" 调用,显示错误“使用 'body(): ResponseBody?' 是一个错误。移动到 val“如预期。

这是一条预期的错误消息,查看分支的 4.2.x 版本中 Response.kt 的代码:

@JvmName("-deprecated_body")
@Deprecated(
    message = "moved to val",
    replaceWith = ReplaceWith(expression = "body"),
    level = DeprecationLevel.ERROR)
fun body(): ResponseBody? = body

所以解决方案是调用 response.body? 看起来你已经在做...

参见:https://github.com/square/okhttp/blob/okhttp_4.2.x/okhttp/src/main/java/okhttp3/Response.kt#L202了解详情

已解决,我开始关注每次导入链接的 okhttp 版本,以及一个链接到 okhttp-3.12.0.jar 的接口。此接口属于单独的 gradle 模块,我发现我忘记添加依赖项 ' 实现 "com.squareup.okhttp3:okhttp:4.2.2" ' 到该模块的 .gradle 文件. (在那种情况下 class 根本不应该找到 okhttp 依赖项,但不知何故找到了旧版本并依赖于它)