我已经在SQLite数据库上编写了一个自定义内容提供程序。内容提供商扩展SQLiteContentProvider。内容提供商在许多插入、删除或更新操作结束时发送通知。现在,我希望在数据库上执行一些更新、插入和删除操作,但不希望生成任何通知。如何做到这一点?
来自SQLiteContentProvider#bulkInsert的代码示例
@Override
public int bulkInsert(Uri uri, ContentValues[] values) {
int numValues = values.length;
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
try {
for (int i = 0; i < numValues; i++) {
Uri result = insertInTransaction(uri, values[i]);
if (result != null) {
mNotifyChange = true;
}
mDb.yieldIfContendedSafely();
}
mDb.setTransactionSuccessful();
} finally {
mDb.endTransaction();
}
onEndTransaction();
return numValues;
}发布于 2012-05-31 05:07:53
我建议在调用不需要通知的update/insert/delete时使用不同的URI
所以你会有YourMetadata.CONTENT_URI和YourMetadata.CONTENT_URI_DONT_NOTIFY
然后,您可以照常执行插入/更新/删除操作。在通知之前,请检查您的uri是否是不应该通知的uri。
如果您有一个URI匹配器,您可以使用匹配结果中的代码来确定您在哪个URI上执行了批量插入
如果没有,您可以使用
boolean notifyChanges = YourMetadata.CONTENT_URI.equals(uri); //will be true if we want to notify on the URI然后在插入后使用notifyChanges的值来确定是否要通知。
https://stackoverflow.com/questions/10824229
复制相似问题