如何等到观察 returns 导致 android kotlin?
How to wait till observe returns results in android kotlin?
我有这个函数,它调用一个观察来检查 table 中是否有数据,如果是 returns 它们。根据结果,我采用最新值并执行函数。
代码段
runBlocking {
val job = lifecycleScope.launch {
withContext(Dispatchers.Main) {
//1. first i need to wait here till observe returns results
viewModel.getAllRatings(context).observe(viewLifecycleOwner) { items ->
if (items.isNotEmpty()) {
rateVal = items[0].rateValue!!
}
}
}
}
job.join()
//2. then only after first step done i need this to execute.
if (rateVal > 0) {
ratingBar!!.rating = rateVal.toFloat()
}
}
getAllRatings()
fun getAllRatings(context: Context): LiveData<List<Rating>> {
val dpDatabase = DPDatabase.getDPDatabase(context = context.applicationContext)
feedbackSelectionRepository = FeedbackSelectionRepository(
dpDatabase
)
allRating = feedbackSelectionRepository.allRatings
return allRating
}
但是在当前代码中。第二个函数 (2.) 甚至在第一部分 (1.) 获得一些结果之前就已执行。
在调试器中,流程进入 1。然后无需等待就进入 2。然后一些结果来自 1。
我只需要等待观察结果。我怎样才能做到这一点?请帮我解决这个问题
将 2 的代码放入您在观察回调中执行的操作中。然后在observe之后就会发生。
我有这个函数,它调用一个观察来检查 table 中是否有数据,如果是 returns 它们。根据结果,我采用最新值并执行函数。
代码段
runBlocking {
val job = lifecycleScope.launch {
withContext(Dispatchers.Main) {
//1. first i need to wait here till observe returns results
viewModel.getAllRatings(context).observe(viewLifecycleOwner) { items ->
if (items.isNotEmpty()) {
rateVal = items[0].rateValue!!
}
}
}
}
job.join()
//2. then only after first step done i need this to execute.
if (rateVal > 0) {
ratingBar!!.rating = rateVal.toFloat()
}
}
getAllRatings()
fun getAllRatings(context: Context): LiveData<List<Rating>> {
val dpDatabase = DPDatabase.getDPDatabase(context = context.applicationContext)
feedbackSelectionRepository = FeedbackSelectionRepository(
dpDatabase
)
allRating = feedbackSelectionRepository.allRatings
return allRating
}
但是在当前代码中。第二个函数 (2.) 甚至在第一部分 (1.) 获得一些结果之前就已执行。
在调试器中,流程进入 1。然后无需等待就进入 2。然后一些结果来自 1。
我只需要等待观察结果。我怎样才能做到这一点?请帮我解决这个问题
将 2 的代码放入您在观察回调中执行的操作中。然后在observe之后就会发生。