gpt4 book ai didi

android - 使用 ContentProvider 插入多行

转载 作者:可可西里 更新时间:2023-11-01 18:49:34 29 4
gpt4 key购买 nike

我需要在一个事务中插入几行。我可以使用 ContentProvider 来实现吗?

最佳答案

我已经在我的应用中实现了它,下面是我使用的代码的要点。

在我的内容提供者中,我覆盖了 applyBatch() 方法,这是一个非常简单的覆盖方法:

/**
* Performs the work provided in a single transaction
*/
@Override
public ContentProviderResult[] applyBatch(
ArrayList<ContentProviderOperation> operations) {
ContentProviderResult[] result = new ContentProviderResult[operations
.size()];
int i = 0;
// Opens the database object in "write" mode.
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
// Begin a transaction
db.beginTransaction();
try {
for (ContentProviderOperation operation : operations) {
// Chain the result for back references
result[i++] = operation.apply(this, result, i);
}

db.setTransactionSuccessful();
} catch (OperationApplicationException e) {
Log.d(TAG, "batch failed: " + e.getLocalizedMessage());
} finally {
db.endTransaction();
}

return result;
}

结果给到下一个操作,因为要支持反向引用。当我真的想在这个单一事务中更改数据库中的内容时,我会遍历我的内容并执行如下操作:

operations.add(ContentProviderOperation
.newInsert(
Uri.withAppendedPath(
NotePad.Notes.CONTENT_ID_URI_BASE,
Long.toString(task.dbId)))
.withValues(task.toNotesContentValues(0, listDbId))
.build());
// Now the other table, use back reference to the id the note
// received
noteIdIndex = operations.size() - 1;

operations.add(ContentProviderOperation
.newInsert(NotePad.GTasks.CONTENT_URI)
.withValues(task.toGTasksContentValues(accountName))
.withValueBackReferences(
task.toGTasksBackRefContentValues(noteIdIndex))
.build());

你只需要记住通过调用来完成:

provider.applyBatch(operations);

这将在单个事务中执行您的操作,并且如果您需要来自较早插入的 id 而没有问题,则支持反向引用。

关于android - 使用 ContentProvider 插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6842326/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com