我已经使用外键和映射表完成了数据库设计.现在,我希望我的应用程序插入Android Search Framework,这需要使用ContentProvider来公开我的数据.
这种情况是否有任何最佳做法?我确实在SO上找到了一些相关的问题,但大多数问题涉及一对多的关系(例如this one).我从这些问题中得出结论,每个数据库最好有一个ContentProvider,然后使用Matcher概念来解析数据库中的多个表.这还留下了其他问题.
>给定一个Note ID,我想返回与该Note相关的所有标签.如何为这种情况设置ContentUri? “content:// myexample / note /#”和“content:// myexample / tag /#”都没有达到目的.
>我覆盖的6种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,从数据库中获取所需的数据.