3

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

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

4

1 回答 1

2

答案似乎是“不,查询参数似乎没有包含在哪些 URI 在notifyChange(...)调用时得到通知的规范中,或者更确切地说,它ContentObserver正在自动注册自身以接收所有后代 URI 通知。”

我的问题似乎是我无意中仍在使用SimpleCursorLoader在另一个问题中实现的用于提供CursorLoader不依赖于ContentProvider. 我现在使用的是ContentProvider,所以我更改为默认值CursorLoader,这似乎已经解决了这个问题。

于 2012-06-21T21:03:58.520 回答