I'm wrapping my head around Kotlin coroutines and LiveData. I want to do really basic use case where ViewModel returns LiveData taken from Repository suspended function, which returns LiveData as well.
Repository function signature:
suspend fun getAll() : LiveData<List<Mountain>>
It can't simply do that:
fun getMountains() : LiveData<List<Mountain>> {
return mountainsRepository.getAll()
}
because the compiler states that suspend function should be called from coroutine or another suspend function. I came up with 2 ugly solutions, but I know they aren't elegant:
1 Solution with runBlocking
fun getMountains() : LiveData<List<Mountain>> = runBlocking { mountainsRepository.getAll() }
2 Solution with nullable LiveData
fun getMountains() : LiveData<List<Mountain>>?{
var mountains : LiveData<List<Mountain>>? = null
viewModelScope.launch{
mountains = mountainsRepository.getAll()
}
return mountains
}
How can I do this properly?