换句话说:一个Order
有0-n个Books
,一个Order
被分配给一个Customer
。
在我的例子中,我有 bookId
。 我想在我获得所有相关项(书籍、订单和客户)并且当我确信它们都存在时启动某个功能 - 我只需要启动它一次。我试图通过以下方式解决它:
View 模型:
private LiveData<Book> book;
private LiveData<Order> order;
private LiveData<Customer> customer;
public MyViewModel(Application app) {
...
book = bookRepository.getBookLiveData(id);
order = Transformations.switchMap(book, b -> orderRepository.getOrder(b.getIdOrder()));
customer = Transformations.switchMap(order, o -> customerRepository.getCustomer(o.getIdCustomer()));
}
但是,此解决方案无效,我相信可以使用 Room/LiveData 以更优雅的方式完成此操作。
我还尝试了另一种方法 - 创建以下对象 BookOrderCustomer
:
public class BookOrderCustomer {
@Embedded
public Book book;
@Embedded
public Order order;
@Embedded
public Customer customer;
}
但这并没有像预期的那样工作,Dao
的查询总是返回 null。
知道如何解决这个问题吗?谢谢。
最佳答案
有 MediatorLiveData ,它可以观察你所有的流并合并数据。我认为这是最好的方法。
关于android - 使用 Room/LiveData 获取并观察三个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56252169/