0

我在 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;
    }
4

1 回答 1

2

我建议在调用您不希望收到通知的 update/insert/delete 时使用不同的 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 的值来确定是否要通知。

于 2012-05-30T21:07:52.513 回答