使用Room / LiveData获取并观察三个对象

时间:2019-05-22 08:12:37

标签: android transformation android-room relation android-livedata

我有以下数据库关系: enter image description here

换句话说:一个Order具有0-n Books,一个Order被分配给一个Customer

就我而言,我有bookId我想在获得所有相关项目(预定,订单和客户)并且确定所有项目都存在时启动某些功能-我只需要启动一次。我试图通过以下方式解决它:

ViewModel:

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。

任何想法如何解决这种情况?谢谢。

1 个答案:

答案 0 :(得分:0)

MediatorLiveData,它可以观察您的所有流并合并数据。我认为这是最好的方法。