OkHttp 4.x 尝试通过呼叫请求访问 url 时出错

Aks*_*hay 2 android kotlin okhttp

我最近开始更新 okhttp3 到 4.x

在这样做时,我收到以下构建时间错误:

Using 'url(): HttpUrl' is an error. moved to val

当我尝试从通过调用获得的请求对象中获取 url 时,问题发生了:

例如

   call.enque(callback : Callback){
     override fun onFailure(call : Call, t:Throwable) {
       val url = call.request().url().toString
     }
   }
Run Code Online (Sandbox Code Playgroud)

我进一步抬头,里面的Url物体Request现在是 val aka final。

此外,他们的升级指南https://square.github.io/okhttp/upgrading_to_okhttp_4/上没有说明

如果您对获取 Url 的其他方式有任何建议,我将不胜感激。

laa*_*lto 7

Using 'url(): HttpUrl' is an error. moved to val
Run Code Online (Sandbox Code Playgroud)

这意味着您应该将函数调用url()更改为属性 access url

okhttp 4replaceWith在弃用注释中带有参数,例如 Android Studio 可以通过右键单击/alt-enter 自动提供修复错误:

@Deprecated(
  message = "moved to val",
  replaceWith = ReplaceWith(expression = "url"),
  level = DeprecationLevel.ERROR)
Run Code Online (Sandbox Code Playgroud)

来自评论:

经过进一步调查,我发现 request() 或 Request 对象来自 Retrofit 2。而 Retrofit 2 从 okhttp3 返回调用对象

这是 Android Studio 的问题。您可以通过显式转换为 okhttp 4 类型来解决它,例如(call.request() as Request).url.