在Android ContentProvider中连接表和通知ContentObservers的最佳实践

Car*_*Lee 15 sqlite android android-contentprovider

我有一个ContentProvider处理与我的应用程序相关的所有数据插入和检索,我遵循Virgil Dobjanschi在Google I/O上建议的模式.我正在使用第一种模式.

我的问题是我有一个逻辑实体,由数据库中的多个表表示.

例如,我有一个Articles表和一个ArticleExtras表.文章代表文章本身,而ArticleExtras代表关于某些文章的附加信息,如评论数量.

我在UI中使用CursorAdapter在ListView的一行中显示文章标题和该文章的注释数.

为了实现这一点,我left outer join ArticleExtras on在Article表的ContentProvider查询方法中添加了一个语句,以便CursorAdapter与Article本身一起获取ArticleExtras.

当从Web获取新文章时,我通​​过ContentProvider将其插入到数据库中,然后通知CursorAdapter并更新UI,这部分按预期工作.

但是,当我取的评论(ArticleExtras)的数量,我想同样的CursorAdapter,这是看在变化content://com.myapp.content/Articles,通知,也让我可以在ListView更新我行.

我当前的实现是这样的:在将ArticleExtras插入数据库之后,我启动一个新查询来检查Articles表是否有任何与我刚刚插入的ArticleExtras相关的行.如果是这样,我将为该文章创建一个新的uri(例如:) content://com.myapp.cotent/Articles/123,并调用getContext().getContentResolver().notifyChange(uri, null),因此正在监视此文章更改的相应CursorAdapter将收到通知.

方法是正确的,还是有更好的方法来实现我想要的?

pro*_*aea 5

Checkout ContactsProvider2,在其中它们将通知uri设置AUTHORITY_URI为对提供者中的其他URI似乎是一个全部捕获.我有相同的探测器,我自己尝试了这个表,并在这些表上有多个表和连接,它工作正常.