通过MediatorLiveData级联流

时间:2019-10-13 18:02:27

标签: android android-livedata android-jetpack

我的任务很简单。

我有一个结果类型NeighbourhoodView(POKO),该结果类型将由三个实时数据(房间表)创建

LiveData<Neighbourhood>
LiveData<City>
LiveData<Country>

这里的目的是获取这三个房间表并将其转换为将在我的片段中显示的POKO

我在MediatorLiveData允许组合来源的地方阅读,但是从我阅读的所有文章来看,流的来源都是独立的。

我有依赖来源

我的第一个消息来源是邻居,该邻居将由id识别。 我的第二个来源取决于返回的邻居,它将返回城市 我的第三个来源是国家,这取决于返回的城市

    operator fun invoke(neighbourhoodId: Long) {
    val result = MediatorLiveData<NeighbourhoodView>()

    val source1 = systemRepository.neighbourhoodById(neighbourhoodId)

source1.value在此处显示为空

    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)
        )
    )
}

我在这里想念什么?我想达到的目标甚至有可能吗?

0 个答案:

没有答案