Получить и наблюдать три объекта с Room / LiveData - PullRequest
2 голосов
/ 22 мая 2019

У меня есть следующие отношения базы данных: 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 всегда возвращал ноль.

Есть идеи, как решить это дело?Спасибо.

1 Ответ

0 голосов
/ 22 мая 2019

Существует MediatorLiveData , он может наблюдать все ваши потоки и объединять данные.Я думаю, что это лучший подход.

...