我正在使用自定义内容提供程序和 CursorLoader 来显示片段中的元素列表。
首先,CursorLoader 调用 ContentProvider 的 query() 来获取存储在我的数据库中的所有元素。在我的 query() 函数中,我启动了一个线程,该线程执行 WebService 调用以更新数据库中的元素。该线程正在解析 WebServices 的响应并调用我的 ContentProviders bulkInsert()。
当我的 bulkInsert() 完成后,我调用 notifyChange()。
现在发生了什么事:我看到在 notifyChange() 之后,我的 ContentProvider 的 query() 方法再次被调用,这导致了新的 WebService 调用等等。
这是我在 ContentProvider 中的 query() 方法:
...
// Database query
ticketCursor = mDb.query(TBL_TICKET_NAME, projection, selection, selectionArgs, null, null, orderBy);
// set Notification URI
ticketCursor.setNotificationUri(getContext().getContentResolver(), TICKET_CONTENT_URI);
// WebService call --> This starts a new Thread for the WebService call
asyncSoapQuery(where, uri);
return ticketCursor;
我的 bulkInsert 方法如下所示:
mDb.beginTransaction();
for (ContentValues value : values) {
mDb.insertWithOnConflict(table, null, value, SQLiteDatabase.CONFLICT_REPLACE);
}
mDb.setTransactionSuccessful();
getContext().getContentResolver().notifyChange(TICKET_CONTENT_URI, null);
mDb.endTransaction();
return values.length();
所以,我的问题是这会导致网络服务调用的无限循环。我认为 notifyChange() 不会再次调用内容提供者的 query() 方法。如果用户在我的 UI 上点击“刷新”,我只想在我的 query() 中再次进行 WS 调用......我在这里错过了什么?
在此先感谢您的帮助!