我是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 我正在尝试删除组成员资格条目。
答案 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);