How to get value from LiveData synchronously?
With Kotlin coroutines
callbackFlow {
val observer = Observer<Unit> {
trySend(Unit)
}
MutableLiveData<Unit>().also {
it.observeForever(observer)
awaitClose {
it.removeObserver(observer)
}
}
}.buffer(Channel.Factory.CONFLATED)
.flowOn(Dispatchers.Main.immediate)
// e.g. single()
You can call getValue()
to return the current value, if there is one. However, there is no "block until there is a value" option. Mostly, that is because LiveData
is meant to be consumed on the main application thread, where indefinitely-blocking calls are to be avoided.
If you need "block until there is a value", use RxJava and ensure that you are observing on a background thread.