首页 > 解决方案 > LiveData 和 room 使用继承

问题描述

我有一个我正在尝试编写的应用程序,它有 3 个从一个对象继承的对象,所有实体,我使用空间在本地存储这些对象。

在每个实体的 dao 中,我都有返回 livedata<List> 的“getAll”函数。

我的问题是,有没有办法从数据库中获取所有列表作为一个列表(因为它们都继承自同一个类)?

除非我错了,如果我只在超类上使用“getAll”,它不会给我每个类的特定字段。我有一个 recyclerView 将这些对象保存为 1 个列表,所以我需要一种方法来组合它们。

我尝试查找它,但是当涉及到继承时,它并不清楚 Room 如何处理东西。(例如,在文档中,谷歌给出了一个使用继承的示例,其中两个对象都具有 uniqe id,但是当我尝试时,我得到了一个错误,即超类id 将被子类 id 覆盖。)。

如果有人可以提供帮助,或者提供我可以了解更多信息的链接,我会非常感谢它。

谢谢,祝你有美好的一天!

标签: androidandroid-roomandroid-livedata

解决方案


把它留在这里以防其他人需要它。

有多种方法可以解决这个问题。

  • 第一个是使用 POJO,如他的回答中所述的“MikeT”。

  • 第二个是向超类添加“类型”属性并获取整个超类列表,然后在运行时选择正确的对象并创建它。(使用相同的 id)。缺点是您多次访问数据库会降低性能。(我今天早上之前想要的解决方案)

  • 第三种方式(我最终使用)是在这篇帖子的回答中,“Danail Alexiev” 在 Room 中 创建了一个自定义 MediatorLiveData 实现,它压缩了 2 个(或更多)livedata 对象并返回一个。


推荐阅读