【Android】kotlin - 异步方法里调用delay 延时器和toast的问题

avatar
作者
猴君
阅读量: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()                 } 

完美解决~!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!