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, как она является более гибкой.

Однако терпит неудачу, когда я изменяю 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); 

Это только добавляет пустой контакт.

Похоже, я должен назвать что-то вроде withValueBackReference() в моей новой версии, но не знаю, как это сделать. Есть идеи?

ответ

0

Оказалось, что мы должны получить сырье контакт идентификатор для вставки:

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); 
Смежные вопросы