删除特定的RawContact内容目录条目

时间:2012-12-20 17:54:51

标签: android android-contacts rawcontacts

我是android dev的新手,所以我可能会把整个概念完全弄错。我想从RawContact目录条目中删除特定条目。这是我的代码:

Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
         Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY);
         Cursor c = getContentResolver().query(entityUri,
                  new String[]{RawContacts._ID, Entity.DATA_ID, Entity.MIMETYPE,CommonDataKinds.GroupMembership.GROUP_SOURCE_ID},
                  null, null, null);

使用游标c我得到适当的Entity.DATA_ID。之后我尝试删除一个条目:

 getContentResolver().delete(entityUri,Entity.DATA_ID+"=?",
                  new String[]{id});

并收到错误:

  

java.lang.UnsupportedOperationException:URI:   内容://com.android.contacts/raw_contacts/2709/entity

我做错了什么?

UPD 1 我正在尝试删除组成员资格条目。

2 个答案:

答案 0 :(得分:2)

请更详细地说明您要做的事情。你说你想“从RawContact目录条目中删除一个特定的条目。”,这是令人困惑的?你想

吗?

a)删除原始联系人? b)删除一组原始联系人? c)删除单个原始联系人的所有数据行? d)删除一组原始联系人的所有数据行?

或者您想对群组成员资格做些什么?

无论如何,我认为你已经向后构建了URI。尝试在rawContactId之前附加Entity.CONTENT_DIRECTORY。我知道文档没有说明这一点,但文档编写得不好。

更好的选择是使用ContactsContract.RawContactEntity表。

答案 1 :(得分:0)

看起来我使用的是错误的URI。我还改用了一种修改表的“新”方式:

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

             ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
                      .withSelection(Data._ID + "=?", new String[]{i})
                      .build());
             getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);