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

标签 android transformation android-room relation android-livedata

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

换句话说:一个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/

相关文章:

javascript - svg 外部对象中的 Canvas 不应用转换

android - 事件未通过 Google 跟踪代码管理器在 Google Analytics 中触发

arrays - 如何使用jq将对象列表转换为列表对象?

javascript - D3 桑基图使用圆形节点代替矩形节点

android - 更新 Room 实体并观察列表

android - 将类型转换器应用于 Dao Android Room

android - 将 Kotlin @Parcelize 与多态一起使用

java - 错误 : Class not found when unmarshalling: com. facebook.login.Login 客户端请求

php - Android:无法向 MYSQL 发送数据。导致崩溃

android - 如何让应用程序以全屏模式运行?