确保协程返回的值覆盖 android kotlin 中的默认值
Make sure value returned from coroutine overwrites default value in android kotlin
我想确保从数据库中查询的值总是晚于默认值。
例如
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
}
}
目前这段代码没有问题。但是协程可能 return 值比默认值快吗?我的意思是,数据库值首先进入查看,默认值覆盖它。如果它可能发生,我该如何预防?谢谢。
当在文本视图上设置默认值时,执行数据库查询的协程甚至没有启动,因此它可以在此之前完成并写入一个会被默认值覆盖的值没有风险
我想确保从数据库中查询的值总是晚于默认值。
例如
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
}
}
目前这段代码没有问题。但是协程可能 return 值比默认值快吗?我的意思是,数据库值首先进入查看,默认值覆盖它。如果它可能发生,我该如何预防?谢谢。
当在文本视图上设置默认值时,执行数据库查询的协程甚至没有启动,因此它可以在此之前完成并写入一个会被默认值覆盖的值没有风险