1

私はアンドロイド開発に慣れていないので、コンセプト全体が完全に間違っている可能性があります。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 に答える