Android Content Provider 和多对多数据库关系

标签 android many-to-many android-contentprovider

我有一个简单的 Notes 应用程序,它在功能上与 Android NotePad 示例相似。一个补充是每个笔记都可以有标签。一个 Note 可以有多个 Tag 并且一个 Tag 可以属于多个 Note - 从而使它成为许多-对多关系。

我已经使用外键和映射表完成了数据库设计。现在,我希望我的应用程序能够插入 Android 搜索框架,这需要使用 ContentProvider 来公开我的数据。

对于这种情况,是否有任何最佳实践可供遵循?我确实在 SO 上找到了一些相关问题,但其中大部分都涉及一对多关系(例如 this one)。我确实从这些问题中得出结论,最好每个数据库都有一个 ContentProvider,然后使用 Matcher 概念来解析数据库中的多个表。这仍然留下其他问题悬而未决。

  1. 给定一个 Note ID,我想返回与该 Note 关联的所有标签。对于这种情况,我该如何设置 ContentUri"content://myexample/note/#""content://myexample/tag/#" 都无法达到目的。

    <
  2. 我重写的 6 个 ContentProvider 方法都不适合这样的目的,对吗?我当然可以引入一种新方法,但我的 ContentProvider 的消费者不会理解。

提前感谢您的建议。

最佳答案

现在我发现了一些关于 Android ContentProvider 中多对多入口关系的很酷的东西。答案来自于Google I/O 2011 Offcial Android Client源码。例如在Google I/O app中,有一个入口叫Session,另一个入口是Speaker。一个Session可能有几个Speaker,一个Speaker会参加多个Session

那么,让我们看看google的解决方案:

https://github.com/google/iosched/blob/2011/android/src/com/google/android/apps/iosched/provider/ScheduleProvider.java

https://github.com/google/iosched/blob/2011/android/src/com/google/android/apps/iosched/provider/ScheduleContract.java

https://github.com/google/iosched/blob/2011/android/src/com/google/android/apps/iosched/provider/ScheduleDatabase.java

也许这个答案会对你们有所帮助。

关于Android Content Provider 和多对多数据库关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6577653/

相关文章:

android - 实时Android内核或应用程序开发

android - AndEngine如何从SD卡加载spritesheet

c# - EF Core 5 - 更新多对多关系中的实体会引发 "Violation of PRIMARY KEY"错误

java - 为什么排序方法不适用于此自定义 AbstractList 实现?

swift - 核心数据连接表多对多关系 - 对象创建

django - 我的 Django 许多字段都标记为唯一,是否有选项可以删除它?

android - 如何通过电子邮件发送在 "android/data"中创建的文件?

android - 如何在直接数据库访问和内容提供者之间做出决定?

android - 动态注册内容提供者

java - 如何从 Unity Android 插件调用非静态方法?