Моя задача проста.
У меня есть тип результата NeighbourhoodView (POKO), который будет создан тремя ливатами (которые являются таблицами комнат
LiveData<Neighbourhood>
LiveData<City>
LiveData<Country>
). Цель состоит в том, чтобы взять эти три таблицы комнат и преобразовать их вPOKO, которое будет отображаться в моем фрагменте
Я читал в местах, где MediatorLiveData позволяет объединять источники, однако из всего, что я прочитал, источники потока автономны.
У меня есть зависимые источники
Мой первый источник - это район, который будет выбран по идентификатору. Мой второй источник зависит от возвращаемого района, который будет возвращать город. Моим третьим источником будет страна, которая зависит отгород возвращен
operator fun invoke(neighbourhoodId: Long) {
val result = MediatorLiveData<NeighbourhoodView>()
val source1 = systemRepository.neighbourhoodById(neighbourhoodId)
source1.value здесь имеет значение null
val source2 = systemRepository.cityById(source1.value?.cityId!!)
val source3 = systemRepository.countryById(source2.value?.countryId!!)
result.addSource(source1) {
result.value = combineLatestData(source1, source2, source3)
}
result.addSource(source2) {
result.value = combineLatestData(source1, source2, source3)
}
result.addSource(source3) {
result.value = combineLatestData(source1, source2, source3)
}
}
private fun combineLatestData(
neighbourhood: LiveData<Neighbourhood>,
city: LiveData<City>,
country: LiveData<Country>
): NeighbourhoodView {
return NeighbourhoodView(
id = neighbourhood.value!!.id, name = neighbourhood.value!!.name, city = CityView(
id = city.value!!.id,
name = city.value!!.name,
countryView = CountryView(id = country.value!!.id, name = country.value!!.name)
)
)
}
Что мне здесь не хватает? Чего я пытаюсь достичь, даже возможно?