需求
onCreate生命周期里, 调用一个异步方法, 网络请求访问成功的话, 首先弹出toast, 2.5秒后自动返回到上一页
遇到的问题
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 在 onCreate 中启动协程
coroutineScope.launch {
updateInfo()
}
}
private suspend fun updateInfo() {
try {
// 模拟网络请求
val response = apiService.getData()
if (response) {
// 这样写会报在主线程内需要写Loop.parse() 和 Loop.loop(), 直接白屏返回到上一页
// 但是加了Loop后, delay后面不会再执行, 也就是提示完不会返回到上一页
Toast.makeText(
this@UpdateInfoActivity,
"Submitted Successfully",
Toast.LENGTH_SHORT
).show()
// 延迟 3 秒后返回上一页
delay(3000L)
finish()
} else {
// 处理错误
}
} catch (e: Exception) {
// 处理异常
}
}
解决办法
把toast放在runOnUiThread{}里面, dalay()放到外面
if (retCode == "0") {
runOnUiThread {
Toast.makeText(
this@MyActivity,
"Submitted Successfully",
Toast.LENGTH_SHORT
).show()
}
delay(2500L)
finish()
}
完美解决~!