【发布时间】:2020-10-04 12:04:57
【问题描述】:
在协程中调用 OkHTTP 客户端的正确方法是什么?
CoroutineScope(IO).launch {
val request = Request.Builder()
.url("${host}/dots")
.build()
val client = OkHttpClient()
client.newCall(request).enqueue(object: Callback{
override fun onFailure(call: Call, e: IOException) {
isConnected.postValue(false)
}
override fun onResponse(call: Call, response: Response) {
val loadingStr = response.body()?.string().toString()
loadingStrings = loadingStr
Log.i("My_Error",loadingStrings)
}
})
}
在 onResponse 中,loadingStr 变量显示 string() 的警告,说明调用了不适当的阻塞方法。请告诉我正确的做法。
【问题讨论】:
-
协程的主要目的是摆脱回调。
enqueue接受回调并在后台线程中运行。这里不需要协程。 -
Sergey 提出了一个很好的观点,如果你在这里启动协程,很奇怪你只是调用 enqueue。我在下面给出的答案是基于您有其他正当理由启动协程范围的假设。
标签: android kotlin okhttp kotlin-coroutines