查询参数会影响ContentResolver notifyChange

时间:2012-06-21 16:50:52

标签: android cursor android-contentprovider android-loadermanager

我正在使用ContentProvider的查询参数,该参数允许我在请求来自同步适配器时通知它,以便它可以执行诸如确保不触发同步到网络之类的操作。我正在CursorLoader使用LoaderManagerCursor附加到CursorAdapter中的ListView - 基础知识。正在提供的数据库通过同步适配器进行更新,因此通知将使用同步适配器使用的URI(带有附加查询参数的URI)。当我在重置加载器之前完成同步适配器后,我在ListView中获得了相应的数据,但是如果我尝试重置加载器,而某些数据仍在同步中,我会得到数据库中的数据。那个时间,并且在数据下载完成后没有通知重置。

我没有找到任何答案,如果查询参数会影响通知ContentResolver.notifyChange(Uri, ContentObserver, boolean)的人。所以我正试图解决这个问题,但如果有人能在我弄清楚之前回答这个问题,那将非常感激。要明确的是,当请求者不是ContentProvider中的同步适配器时,cursor.setNotificationUri(getContext().getContentResolver(), uri)正在调用ContentProvider.query(...)。当请求者是getContext().getContentResolver().notifyChange(uri, null, false)中使用触发请求的URI的同步适配器时,它会调用ContentProvider.insert/update/delete/bulkInsert(...)

1 个答案:

答案 0 :(得分:2)

答案似乎是“不,查询参数似乎不包含在notifyChange(...)呼叫中通知哪些URI的规范中,或者ContentObserver自动注册接收所有后代URI通知。“

我的问题似乎是我无意中仍在使用在另一个问题中实施的SimpleCursorLoader来提供不依赖于CursorLoader的{​​{1}}实施。我现在使用ContentProvider,因此我更改为默认ContentProvider,这似乎解决了问题。