一旦将数据保存到数据库的协程完成,我想将livedata bool(boolean) 标志设置为true。我当前的代码如下:

在ViewModel中:

    private suspend fun updatePlace(eventId: Long, placeName: String, placeAddress: String) {
        withContext(Dispatchers.IO) {
            repository.updatePlace(placeName, placeAddress)
        }
    }

    fun savePlace(placeName: String, placeAddress: String) {
        val eventId = event.value!!.eId

        uiScope.launch {
            updatePlace(eventId, placeName, placeAddress)
        }
        //flag is currently set regardless of if the updatePlace function is completed
        _currentPlaceUpdated.value = true

    }

我一直在阅读有关异步并等待协程的信息,但还没有弄清楚在updatePlace()函数完成后如何设置_currentPlaceUpdated的值。

最佳答案

只需将完成任务放在updatePlace调用之后即可。

uiScope.launch {
    updatePlace(eventId, placeName, placeAddress)
    _currentPlaceUpdated.value = true
}
withContextscope.async(Dispatchers.IO) { /* Code */ }.await()相似,但对返回值的传递进行了一些优化。
withContext暂停当前调用的协程,直到其内部(代码块)完成。 launch的作用是启动协程并让下一个代码执行,这就是为什么立即调用它的原因。

10-04 19:54