【发布时间】:2011-10-30 16:43:49
【问题描述】:
我完全可以使用以下代码一一添加联系人:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,
CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, "Hello")
.withValue(StructuredName.FAMILY_NAME, "World").build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是,当我尝试一个一个地添加大约 500 个联系人时 - 这需要几分钟,这对我的应用程序来说太长了。添加多个联系人有更快的方法吗?
【问题讨论】:
-
您可以将它们添加到线程中 - 而不是 UI 线程。
-
我在单独的线程中做,问题是操作本身需要太多时间。在 iPhone 中,500 个联系人需要几秒钟。
-
我以类似的方式执行此操作,但是每次我想添加联系人时都会执行批处理。我不认为这是正确的方法,但它似乎工作正常
-
好吧,如果 iPhone 运行几秒钟,而 Android 运行几分钟,我倾向于认为我使用了错误的 API。
-
退出使用 ApplyBatch() 并开始使用 [BulkInsert()][1]。 [1]:stackoverflow.com/questions/5596354/…
标签: java android contacts android-contentprovider