【发布时间】:2021-12-09 01:45:49
【问题描述】:
我对 Kotlin、协程和 API 调用完全陌生,我正在尝试基于 this API 制作应用程序。
我的目的是在我的MainActivity 中显示游戏的信息,所以我需要为此填写一些TextView。
我的 API 调用和响应系统运行良好:响应正常且没有错误,但是调用是使用 Kotlin 的协程进行的,它不会让我在收到响应后更新我的 UI。
为了简单起见,我只附上我的 MainActivity 代码,这是问题的根源。
class MainActivity : AppCompatActivity() {
private lateinit var b: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
b = ActivityMainBinding.inflate(layoutInflater)
setContentView(R.layout.activity_main)
listAllGames()
}
private fun listAllGames() {
CoroutineScope(Dispatchers.IO).launch {
val call = getRetrofit().create(APIService::class.java).listAllGames("")
val games = call.body()
runOnUiThread {
if (call.isSuccessful) {
b.gameTitle.text = games?.get(0)?.title ?: "Dummy"
b.gameDesc.text = games?.get(0)?.short_description ?: "Dummy"
b.gameGenre.text = games?.get(0)?.genre ?: "Dummy"
}
else {
Toast.makeText(applicationContext, "ERROR", Toast.LENGTH_SHORT).show()
Log.d("mydebug", "call unsuccessful")
}
}
}
}
private fun getRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://www.freetogame.com/api/games/")
.addConverterFactory(GsonConverterFactory.create())
.build()
}
}
具体来说,listAllGames() 方法是这里的问题:应用程序将成功构建,如果在 if (call.isSuccessful) 块内添加断点,它将正确显示数据;但是在运行应用程序时,显示将永远保持空白。
提前感谢大家!
【问题讨论】:
标签: android api kotlin user-interface retrofit2