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

时间:2012-08-10 04:04:02

标签: android sqlite android-contentprovider

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

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

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

我在UI中使用CursorAdapter在ListView的一行中显示文章标题和该文章的评论数。

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

当从网上获取新文章时,我通​​过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。

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

1 个答案:

答案 0 :(得分:5)

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