我遇到的情况是,我需要在某个日期插入一行,并在活动中的特定日期之后更新所有条目。
为此,我想我会在日期之后使用LoaderManager
回调加载条目,并使用ContentProviderOperation
数组从onLoadFinished()
批量更新所有条目方法
我面临的问题是我对游标有setNotificationUri
,因此再次调用onLoadfinished
,再次插入行并继续循环(不设置通知{{ 1}}不是我的选择。)
有没有优雅的解决方案来阻止递归调用?
以下是我的Uri
和onCreateLoader
的简化代码:
onLoadFinished
答案 0 :(得分:0)
我最终将db操作移动到一个单独的线程而不使用加载器回调
答案 1 :(得分:0)
决定为那些在这个问题上苦苦挣扎的人写一个答案。
我有两个带有外键的表,我需要从1个表中的_ID来在第二个表中创建一个foreing键,这就是为什么我必须单独插入每一行(而不是作为bulkInsert)。它导致我的Loader在每次插入后更新。我已经通过阻止ContentProvider中的insert方法调用notifyChange并在每次批量操作后手动通知ContentProvider来解决了这个问题。
希望这会对某人有所帮助。
答案 2 :(得分:0)
是否有任何优雅的解决方案来停止递归调用?
解决方法很简单,关闭光标以停止递归调用。只需添加它-
data.close();
applyBatch的不透明度之后。
答案 3 :(得分:-1)
您是否尝试过如下:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Log.i(TAG, "Inside onLoadFinished");
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
mAdapter.swapCursor(data);
// The list should now be shown.
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}