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_URIYourMetadata.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 に答える