实时数据中的两个对象相互引用

时间:2020-03-17 23:56:01

标签: android android-room android-livedata android-viewmodel mutablelivedata

我通过Android Room保存了两个对象(Object1和Object2),我想使用 LiveData 访问这些对象。 Object1包含对Object2的引用。

public class Object1 {

...

private Object2 object2;

...

}

我想将包含我所有对象的LivaData<List<Object1>>从ViewModel传递给Activity,每个Object1已经保存了对匹配Object2的引用(Object1存储了Object2的ID在数据库中)。

组合对象的最佳方法是什么?我找到了 MediatorLiveData MutableLiveData ,但找不到适合我的情况的示例。

编辑: 关于整体情况:Object1是我从网络上加载并通过Android Room缓存的一些数据。 Object2是用户可以在本地保存的一些其他数据,始终与来自某个特定Object1的数据有关。因此,每个Object2与一个Object1相关,但并非每个Object1都有一个Object2。最后,我想将一个Object传递到UI,其中包含来自Web的所有数据以及(如果有的话)所有其他数据,然后用户添加到其中。

问题:我不知道以哪种方式匹配来自两个不同数据源的数据的最有效方法是,当其中一个更改时, LiveData 总是更新。

感谢您在学习Android的同时为我提供帮助

1 个答案:

答案 0 :(得分:1)

如果您尝试从object1获取object1,则将检索object2的数据,然后要将其传递给观察者,则应使用MediatorLiveData。

 private MediatorLiveData<Object1> object2 = new MediatorLiveData<>();

  object2.addSource(sourceObject1, object1 -> {
           // retrieve object2 from id inside object1
        });
相关问题