1

我是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 我正在尝试删除组成员身份条目。

4

2 回答 2

2

请对您要执行的操作进行更完整的解释。您说要“从 RawContact 目录条目中删除特定条目。”,这是令人困惑的吗?你想要_____吗

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

或者你想对组成员做些什么?

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

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

于 2012-12-20T18:44:41.097 回答
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);
于 2012-12-24T11:22:47.073 回答