Kotlin 协程在 response.await() 后返回

Kotlin Coroutine returning after response.await()

我正在尝试制作一个连接到 api 的 android 应用程序,为此我正在使用 Kotlin Coroutines 和 Retrofit。我正在按照本教程 (https://android.jlelse.eu/android-networking-in-2019-retrofit-with-kotlins-coroutines-aefe82c4d777) 尝试设置我自己的 api,但我偶然发现了一个问题。我无法从 api 获取任何数据,因为我无法处理响应。

我不太了解协程,所以我不明白这里的问题是什么。如果我 运行 调试并逐行进行,它每次都运行良好,但如果我 运行 应用程序,它只会打印 TestPoint1。此外,它不会引发任何错误,响应始终为 200 OK。我尝试结合

val standings = service.getStandings()

val response = standings.await()

成一行,之后它在调试时也不起作用。它在启动协程后继续执行代码。

val service = ApiFactory.footballApi

GlobalScope.launch(Dispatchers.Main) {
    val standings = service.getStandings()
    try {
        Log.d("TAG", "TestPoint1")
        val response = standings.await()
        Log.d("TAG", "TestPoint2")
        if(response.isSuccessful){
            //store data
        }else{
            Log.d("MainActivity ",response.errorBody().toString())
        }
    }catch (e: Exception){
        Log.d("TAG", "Error")
    }
}

Dispatchers.Main 切换为 Dispatchers.IO 。您不能在主线程上发出该请求。 协程需要协程上下文才能知道它们将在哪个线程中 运行 。为此,Dispatchers class 为您提供了一些选择。目前您正在 Dispatchers.Main 中发出请求,但您无法这样做,因为从 API 获取数据需要另一个线程。 IO 是网络调用的正确线程。

注:

另请检查:互联网许可、互联网连接。