Avatar ·

如何修复 OkHttp 和 Kotlin 协程中的 "Inappropriate blocking method call" 错误

你好!我是一名 Kotlin 初学者,正尝试在协程内使用 OkHttp 发起 HTTP 请求。我有以下代码: ```kotlin suspend fun fetchData(): String { val client = OkHttpClient() val request = Request.Builder() .url("https://api.example.com/data") .build() val response = client.newCall(request).execute() // 这里报错! return response.body?.string() ?: "" } ``` 但编译器或 linter(Detekt、IntelliJ IDEA)会发出警告:“Inappropriate blocking method call”。我使用协程来实现异步,但 `execute()` 方法会阻塞当前线程。如何在协程中正确发起 HTTP 请求,以避免阻塞线程?我听说过 `suspendCancellableCoroutine`,但不知道如何应用。另外,我还使用 Moshi 来解析 JSON。请帮忙解答,谢谢。 问题:我想保持协程的异步性,但 OkHttp 默认只提供同步的 `execute()` 或回调 `enqueue`。