【问题标题】:Insert a new contact - why ContentValues is not working插入新联系人 - 为什么 ContentValues 不起作用
【发布时间】:2013-09-29 10:48:52
【问题描述】:

以下正在插入新联系人:

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() 的东西,但不知道该怎么做。有什么想法吗?

【问题讨论】:

    标签: android contacts android-contentprovider contactscontract


    【解决方案1】:

    原来我们应该获取插入的原始联系人 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);
    

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 2019-10-28
      • 2014-05-17
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多