阅读量:0
需求
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() }
完美解决~!