android - LiveData 和 room 使用继承
问题描述
我有一个我正在尝试编写的应用程序,它有 3 个从一个对象继承的对象,所有实体,我使用空间在本地存储这些对象。
在每个实体的 dao 中,我都有返回 livedata<List> 的“getAll”函数。
我的问题是,有没有办法从数据库中获取所有列表作为一个列表(因为它们都继承自同一个类)?
除非我错了,如果我只在超类上使用“getAll”,它不会给我每个类的特定字段。我有一个 recyclerView 将这些对象保存为 1 个列表,所以我需要一种方法来组合它们。
我尝试查找它,但是当涉及到继承时,它并不清楚 Room 如何处理东西。(例如,在文档中,谷歌给出了一个使用继承的示例,其中两个对象都具有 uniqe id,但是当我尝试时,我得到了一个错误,即超类id 将被子类 id 覆盖。)。
如果有人可以提供帮助,或者提供我可以了解更多信息的链接,我会非常感谢它。
谢谢,祝你有美好的一天!
解决方案
把它留在这里以防其他人需要它。
有多种方法可以解决这个问题。
第一个是使用 POJO,如他的回答中所述的“MikeT”。
第二个是向超类添加“类型”属性并获取整个超类列表,然后在运行时选择正确的对象并创建它。(使用相同的 id)。缺点是您多次访问数据库会降低性能。(我今天早上之前想要的解决方案)
第三种方式(我最终使用)是在这篇帖子的回答中,“Danail Alexiev” 在 Room 中 创建了一个自定义 MediatorLiveData 实现,它压缩了 2 个(或更多)livedata 对象并返回一个。
推荐阅读
- linux - 根据标题拆分fasta文件
- javascript - node_modules/ng2-bs3-modal/components/modal-header.d.ts.ModalHeaderComponent.html(3,107) 中的错误:属性“modal”是私有的,只能访问
- excel - VBA 在 TOR 中打开链接(每个都在新选项卡中)
- reactjs - 错误尝试导入错误:“NotificationsNoneIcon”未从“@material-ui/icons”导出
- google-bigquery - 如何在 BigQuery 中提取
- javascript - 光滑的滑块响应垂直:false 在 Chrome 中不起作用
- python - Python:如何根据条件重塑数据框?`
- sql - 如何使用查询验证数据库迁移?
- azure-devops - 我们如何通过 Azure DevOps REST API 创建 Azure 数据工厂管道?
- php - Apache Web 服务器上的 Azure DevOps 部署