我通过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的同时为我提供帮助
答案 0 :(得分:1)
如果您尝试从object1获取object1,则将检索object2的数据,然后要将其传递给观察者,则应使用MediatorLiveData。
private MediatorLiveData<Object1> object2 = new MediatorLiveData<>();
object2.addSource(sourceObject1, object1 -> {
// retrieve object2 from id inside object1
});