我在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;
}
答案 0 :(得分:2)
我建议在调用不需要
通知的更新/插入/删除时使用不同的URI因此您将拥有YourMetadata.CONTENT_URI
和YourMetadata.CONTENT_URI_DONT_NOTIFY
然后你可以正常执行插入/更新/删除..就在你通知检查之前,看看你的uri是否是你不应该通知的
如果您有URI匹配器,则可以使用匹配结果中的代码来确定您在
上执行批量插入的URI。如果没有,你可以使用
boolean notifyChanges = YourMetadata.CONTENT_URI.equals(uri); //will be true if we want to notify on the URI
然后在插入后使用notifyChanges的值来确定是否要通知。