kotlin coroutine在响应后返回()



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

我对Coroutines了解不多,所以我不明白这里的问题是什么。如果我每次运行调试并逐行行驶,它的工作正常,但是如果我运行该应用程序,则只会打印TestPoint1。另外,它不会丢任何错误,并且响应始终为200个。我试图结合

val standings = service.getStandings()

val response = standings.await()

进入一行,之后它也不适用于调试。它在启动Coroutine后继续进行代码。

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。您无法在主线程上提出该请求。Coroutines需要Coroutine上下文,以便在要运行的线程中知道。为此,Dispatchers类为您提供一些选择。当前,您正在在Dispatchers.Main中提出请求,因为从API获取数据需要另一个线程,因此无法做到这一点。IO是网络调用的正确线程。

注意:

另外,请检查:Internet许可,Internet连接。

相关内容

  • 没有找到相关文章

最新更新