2

我使用此代码填充我的联系人,但添加单个联系人需要很长时间(大约 400 英里)。我可以以某种方式优化插入吗?出于测试目的,我需要填充大约 5000 个联系人,这可能需要很长时间。

public void addContact(ArrayList<String> info){
    byte[] imageToLoad;
    ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>(); 
    op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
        //.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT) 
        .build()); 

 // first and last names 
      op_list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
  .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
        .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
        .withValue(StructuredName.GIVEN_NAME, info.get(0)) 
        .withValue(StructuredName.FAMILY_NAME, info.get(1)) 
        .build()); 

      op_list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
              .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
              .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
              .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, info.get(2))
              .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, Phone.TYPE_CUSTOM)
              .build());
      op_list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
              .withValueBackReference(Data.RAW_CONTACT_ID, 0)

      .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
      .withValue(ContactsContract.CommonDataKinds.Email.DATA, info.get(3))
      .withValue(ContactsContract.CommonDataKinds.Email.TYPE, "emailType")
      .build());



      switch (info.get(4).charAt(0)) {
    case '1':
        imageToLoad = image1;
        break;
    case '2':
        imageToLoad = image2;
        break;
    case '3':
        imageToLoad = image3;
        break;
    default:
        imageToLoad = null;
        break;
    }


      Log.e("ContactGenerator", info.get(0) + "   "+ info.get(1) + "   " + info.get(2) + "   " +info.get(3) );


      op_list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
      .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, imageToLoad)
      .build());

      info = null;

 try{ 
  ContentProviderResult[] results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list); 
 }catch(Exception e){ 
  e.printStackTrace(); 
 } 
}
4

0 回答 0