删除特定 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 内容目录条目的主要内容,如果未能解决你的问题,请参考以下文章

如何查看所有 ArrayList 条目并删除特定条目?

使用 PowerShell 从 Azure 中存储帐户的管理 ACL 列表中删除 ACL 条目

从 CoreData 中删除特定条目

从 Array() 中间删除一个条目的最快方法

Powershell中不存在特定对象属性时如何删除条目?

从包含 R 中特定字符的字符串向量中删除条目 [重复]