1

以下是工作中插入一個新的聯繫人:插入一個新的聯繫人 - 爲什麼ContentValues不工作

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.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, StructuredName.CONTENT_ITEM_TYPE) 
     .withValue(StructuredName.GIVEN_NAME, given_name) 
     .build()); 

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

我想切換到ContentValues,因爲它是更靈活。

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
     .build()); 

ContentValues values = new ContentValues(); 
values.put(StructuredName.GIVEN_NAME, given_name) 
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValues(values).build()); 

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

這只是增加了一個空的接觸:

然而,當我改變ContentValues如下失敗。

看起來我應該在我的新版本中調用類似withValueBackReference()的東西,但不知道如何去做。有任何想法嗎?

回答

0

原來我們應該得到的原始接觸ID爲插入:

ContentResolver resolver = getContentResolver(); 
    Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); 

    ContentValues values = new ContentValues(); 
    long id = ContentUris.parseId(resolver.insert(uri, values)); 
    uri = Uri.parse("content://com.android.contacts/data"); 

    values.put("raw_contact_id", id); 
    values.put(StructuredName.GIVEN_NAME, given_name) 
    resolver.insert(uri, values); 
相關問題