Okhttp4,无法访问“ body”:它在“ Response”中是程序包专用的

时间:2019-12-03 13:56:52

标签: android kotlin okhttp

根据迁移指南,我正在从okhttp 3.14迁移到okhttp4,当替换“ response.body()?” 调用“ response.body?” 时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 “。

2 个答案:

答案 0 :(得分:0)

这是一个预期的错误消息,它在分支的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

答案 1 :(得分:0)

解决了,我开始观察哪个版本的okhttp链接每个导入,以及一个接口链接到 okhttp-3.12.0.jar 。该接口属于单独的gradle模块,我发现我忘记在该模块的.gradle文件中添加依赖项'实现“ com.squareup.okhttp3:okhttp:4.2.2” '。 (在那种情况下,类根本不会找到okhttp依赖项,而是以某种方式找到了旧版本并依赖它)