1. withValueBackReference
protected void createContactEntry() { ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType()) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName()) .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "小明") .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "10086") .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, "1") .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Email.DATA, "google@sina.com") .withValue(ContactsContract.CommonDataKinds.Email.TYPE, "1") .build()); try { getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { Log.e(TAG, "Exceptoin encoutered while inserting contact: " + e); } }
這裡withValueBackReference("column","index");第一個參數對應於資料庫中的列,第二個參數代表著回引的值。這個比較抽象,也就是說,大量操作資料庫時,index表示第幾個操作返回結果的id或是數量。
例如:上面的代碼withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);這個表示將ContactsContract.Data.RAW_CONTACT_ID的值設為
ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType()) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName()) .build()
這個插入操作被執行完畢以後的uri中取的id的值,假設上面傳回值是"content://com.android.contacts/raw_contacts/5"這裡就是取5這個值,這裡是插入操作。
當然如果是更新操作,返回的結果就是更新的列數,ContactsContract.Data.RAW_CONTACT_ID的值也就是更新的列數。、
未完。。待續。。。