做Android开发的朋友肯定对使用ContentProvider插入数据并不陌生,通常我们使用ContentProvider基本都是经历如下两个步骤:
- 声明定义ContentProvider及其相关的URI,编写Provider中对应的增删改查方法;
- 使用ContentResolver及其对应的URI来对ContentProvider进行增删改查操作;
对于使用ContentProvider进行插入操作,分别可以使用insert、bulkInsert两个API接口,前者用于单条数据插入操作,后者则更适合批量数据插入操作,简单的了解了一遍ContentProvider的相关知识后,来看看下面这段代码:
public static void addOrUpdateContacts(Context context, Collection<ContactStruct> contacts) {
if (contacts == null || contacts.isEmpty()) {
return;
}
final int kCount = contacts.size();
ContentValues[] valuesArray = new ContentValues[kCount];
int pos = 0;
for (ContactStruct contact : contacts) {
ContentValues values = new ContentValues();
values.put(ContactTable.COLUMN_UID, contact.uid);
values.put(ContactTable.COLUMN_NAME, contact.name);
values.put(ContactTable.COLUMN_PHONE, contact.phone);
values.put(ContactTable.COLU

在Android开发中,使用ContentResolver批量插入数据时可能会遇到bulkInsert返回0,导致数据未插入的问题。原因是 Binder交易缓冲区大小有限制,当插入数据过大,会触发TransactionTooLargeException。为解决此问题,可以将大量数据拆分并分批插入,避免超过Binder的缓冲区限制。ContentResolver内部处理此类异常时会直接返回0且无日志输出,这可能导致潜在问题难以发现。
最低0.47元/天 解锁文章

2666

被折叠的 条评论
为什么被折叠?



