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

前端之家收集整理的这篇文章主要介绍了Android Content Provider和多对多数据库关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的Notes应用程序,其功能类似于 Android NotePad示例.另外一点是每个音符都可以有标签.注释可以有多个标记,标记可以属于多个注释 – 从而使这成为多对多关系.

我已经使用外键和映射表完成了数据库设计.现在,我希望我的应用程序插入Android Search Framework,这需要使用ContentProvider来公开我的数据.

这种情况是否有任何最佳做法?我确实在SO上找到了一些相关的问题,但大多数问题涉及一对多的关系(例如this one).我从这些问题中得出结论,每个数据库最好有一个ContentProvider,然后使用Matcher概念来解析数据库中的多个表.这还留下了其他问题.

>给定一个Note ID,我想返回与该Note相关的所有标签.如何为这种情况设置ContentUri? “content:// myexample / note /#”和“content:// myexample / tag /#”都没有达到目的.
>我覆盖的6种ContentProvider方法都不适合这样的目的,不是吗?我当然可以介绍一种新方法,但ContentProvider的消费者不会理解这种方法.

提前感谢您的建议.

解决方法

是的,当您想要实现搜索时,需要使用ContentProvider实现它.

您可以使用现有内容提供程序检索与注释关联的标记.

您可以使用“content:// myexample / note / tag /#”形式定义另一个URL,以获取与特定节点关联的所有标记.

您需要在URI匹配器中添加另一个必须匹配的URI.
说像GET_NOTE_TAGS = 3;

在ContentProvider的getType方法中,返回适当的mime类型.我猜这将与标签的mime类型相同,因为您返回相同的标签.

然后在您的query / update / delete / insert方法中解析传入的URI,使其与“content:// myexample / note / tag /#”匹配.然后在数据库内容上适当地实现查询,并返回需要返回的标记.

“content:// myexample / note / tag /#”架构只是一个示例,您可以在同一ContentProvider中使用多个URI.

你还说你必须加入表格.可以使用db.query完成,如果它变得复杂,您可以使用rawqueries,从数据库获取所需的数据.

猜你在找的Android相关文章