如何修复 Kotlin 协程中 OkHttp 的 "inappropriate blocking method call" 错误
大家好!我正在用 Kotlin 编写一个使用协程进行异步操作的应用。对于 HTTP 请求,我使用 OkHttp,对于 JSON 解析,我使用 Moshi。一切都能运行,但我总是在 IntelliJ IDEA 中看到对 OkHttp 的 `execute()` 调用的警告 "Inappropriate blocking method call"。这是我的代码:
```kotlin
suspend fun fetchData(): String {
val client = OkHttpClient()
val request = Request.Builder()
.url("https://api.example.com/data")
.build()
// 这里 IDE 将 execute() 标记为阻塞调用
val response = client.newCall(request).execute()
return response.body?.string() ?: ""
}
```
我明白 `execute()` 是一个阻塞方法,不应该在协程内部调用。但如何正确地发起请求呢?我读过关于 `enqueue()` 的内容,但不知道如何将其与协程集成。我尝试过使用 `withContext(Dispatchers.IO)`,但警告仍然存在。也许需要使用其他库?