我有一个简单的 Notes 应用程序,它在功能上与 Android NotePad 示例相似。一个补充是每个笔记都可以有标签。一个 Note
可以有多个 Tag
并且一个 Tag
可以属于多个 Note
- 从而使它成为许多-对多关系。
我已经使用外键和映射表完成了数据库设计。现在,我希望我的应用程序能够插入 Android 搜索框架,这需要使用 ContentProvider
来公开我的数据。
对于这种情况,是否有任何最佳实践可供遵循?我确实在 SO 上找到了一些相关问题,但其中大部分都涉及一对多关系(例如 this one)。我确实从这些问题中得出结论,最好每个数据库都有一个 ContentProvider
,然后使用 Matcher 概念来解析数据库中的多个表。这仍然留下其他问题悬而未决。
给定一个
<Note ID
,我想返回与该 Note 关联的所有标签。对于这种情况,我该如何设置ContentUri
?"content://myexample/note/#"
和"content://myexample/tag/#"
都无法达到目的。我重写的 6 个
ContentProvider
方法都不适合这样的目的,对吗?我当然可以引入一种新方法,但我的ContentProvider
的消费者不会理解。
提前感谢您的建议。
最佳答案
现在我发现了一些关于 Android ContentProvider 中多对多入口关系的很酷的东西。答案来自于Google I/O 2011 Offcial Android Client源码。例如在Google I/O app中,有一个入口叫Session
,另一个入口是Speaker
。一个Session
可能有几个Speaker
,一个Speaker
会参加多个Session
。
那么,让我们看看google的解决方案:
也许这个答案会对你们有所帮助。
关于Android Content Provider 和多对多数据库关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6577653/