gpt4 book ai didi

android - 是否可以从 ContentProvider bulkInsert 获取最后的 "N"ID?

转载 作者:行者123 更新时间:2023-11-29 19:45:33 26 4
gpt4 key购买 nike

问题

假设我想使用 ContentProvider 在表格中插入 1000 个元素。为此,我通常会使用 bulkInsert

但是如果我想要成功插入操作的 ID 怎么办?我无法通过 bulkInsert 方法获取该信息,因为它只返回一个 long

所以我想知道,有没有办法进行批量插入并获取新插入的 ID?

我现在在做什么

我想到的解决方案是获取最后“N”个插入行并获取 bulkInsert 之后的 ID,或者根据插入行的列进行查询(比方说,“名称”列)。

这两种方法都可行,但我真的需要采取这一额外步骤吗?感觉有点多余……

我的 bulkInsert 示例:

final SQLiteDatabase db = mOpenHelper.getWritableDatabase();

switch (sUriMatcher.match(uri)) {
case BLAH: {
db.beginTransaction();
int rCount = 0;
for (ContentValues value : values) {
long _id = db.insert(SaiteContract.BlahEntry.TABLE_NAME, null, value);
if (_id != -1) {
rCount++;
}
}
db.setTransactionSuccessful();
db.endTransaction();

Context context = getContext();
if (context != null) {
context.getContentResolver().notifyChange(uri,null);
}

return rCount;
}
// Other tables
default:
return super.bulkInsert(uri,values);
}
}

最佳答案

bulkInsert 的约定是返回受影响的行数,因此我不建议更改它。如果需要进行任意调用,可以使用 ContentResolver.call(),它返回一个 Bundle。例如,在您的提供商实现中:

@Override
public Bundle call(String method, String args, Bundle extras) {
if (method.equals("customInsert")) {
ContentValues[] values = extras.getParcelableArray("contentValues")
// do bulk insert and return list of ids in a new Bundle
}
}

然后简单地调用

Bundle result = getContentResolver().call(...);
List<Long> ids = result.getLongArray("ids");

关于android - 是否可以从 ContentProvider bulkInsert 获取最后的 "N"ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37799243/

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