我正在尝试制作一个连接到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连接。