android - 确保从协程返回的值覆盖 android kotlin 中的默认值

标签 android kotlin kotlin-coroutines objectbox

我想确保从数据库中查询的值始终晚于默认值。

例如

class SetTimeFragment : Fragment(){

    private lateinit var binding: FragmentSetTimeBinding

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        binding = FragmentSetTimeBinding.inflate(layoutInflater, container, false)

        val dbId = 3
        val defaultTime = LocalTime.now().toString()

        //Set default value
        binding.timeView.setText(defaultTime)


        lifecycleScope.launchWhenCreated {

            val itemList = withContext(Dispatchers.IO) {

                //This is Database query
                ObjectBox.store.boxFor(Data::class.java)[dbId]
            }

            // string from database e.g.12:30
            val newTime = itemList.dbTimeStr

            //overwrite default value with database query result
            binding.timeView.setText(newTime)
        }


        return binding.root
    }

} 

目前这段代码没有问题。但是协程返回值的速度可能比默认值更快吗?我的意思是,数据库值首先查看,默认值会覆盖它。如果可能发生,我该如何预防?谢谢。

最佳答案

当在 TextView 上设置默认值时,执行数据库查询的协程甚至不会启动,因此不存在在此之前完成并写入将被默认值覆盖的值的风险

关于android - 确保从协程返回的值覆盖 android kotlin 中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70689937/

相关文章:

android - Android 中 DatatypeConverter.printHexBinary(byte[] array) 和 DatatypeConverter.parseHexBinary(String str) 的替代方案

java - ContactsContract.CommonDataKinds.Email.* 返回电话号码

android - Kotest(以前的 KotlinTest)在 Android Studio 中还能用吗?

kotlin - 如何定义我作为参数传递的函数作为可空值?

android - java.lang.IllegalStateException : Cancel call cannot happen without a maybeRun

android - Kotlin 协同程序 - 如果一段时间后第一个任务没有完成,则开始另一个任务

android - 在 android 中 move 、缩放和裁剪图像,如 facebook 个人资料图片

java - 设计 Android UI 的最佳实践是什么?

android - 从 NestedScrollView 中删除 OnScrollChangeListener

android - 如何在 Android 上使用 Coroutines 取消和不中断,包括根据生命周期自动取消?