删除特定 RawContact 内容目录条目
Posted
技术标签:
【中文标题】删除特定 RawContact 内容目录条目【英文标题】:Deleting a specific RawContact content directory entry 【发布时间】:2012-12-08 07:18:31 【问题描述】:我是 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: content://com.android.contacts/raw_contacts/2709/entity
我做错了什么?
UPD 1 我正在尝试删除组成员身份条目。
【问题讨论】:
【参考方案1】:请更完整地解释您要执行的操作。您说要“从 RawContact 目录条目中删除特定条目。”,这是令人困惑的吗?你要不要
a) 删除原始联系人? b) 删除一组原始联系人? c) 删除单个原始联系人的所有数据行? d) 删除一组原始联系人的所有数据行?
或者你想对组成员做些什么?
无论如何,我认为您已经反向构建了 URI。尝试在 rawContactId 之前附加 Entity.CONTENT_DIRECTORY。我知道文档没有这么说,但是文档写得不好。
更好的选择是使用 ContactsContract.RawContactEntity 表。
【讨论】:
乔,谢谢。我想删除 groupmembership 条目,这是正确的。正确的方法是什么?谢谢你的建议——我会试试的。顺便说一句 - 你是什么意思倒退 - 什么是正确的?我正在从文档中复制粘贴样本。它应该看起来像:raw_contacts/entity/2709? BTW developer.android.com/reference/android/provider/… 说:这是一个严格的只读表。是否可以从中删除? 不幸的是,反转不起作用:java.lang.IllegalArgumentException: URI: content://com.android.contacts/raw_contacts/entity/2709【参考方案2】:看来我使用了错误的 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);
【讨论】:
以上是关于删除特定 RawContact 内容目录条目的主要内容,如果未能解决你的问题,请参考以下文章