当前位置:   article > 正文

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

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

需求

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) {
            // 处理异常
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

解决办法

把toast放在runOnUiThread{}里面, dalay()放到外面

                if (retCode == "0") {
                    runOnUiThread {
                        Toast.makeText(
                            this@MyActivity,
                            "Submitted Successfully",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                    delay(2500L)
                    finish()
                }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

完美解决~!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/923181
推荐阅读
相关标签
  

闽ICP备14008679号