3

コードで連絡先の写真を削除しようとしています。Photo.PHOTO を null に設定してこれを試しました。ただし、ステートメントは例外をスローします。コードは次のとおりです。

ContentValues values = new ContentValues();
int             result = 0;

values.put(Data.RAW_CONTACT_ID, contactId);
values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
values.put(Photo.PHOTO, (byte[])null);

result = getContext().getContentResolver().update(Data.CONTENT_URI, values, Data.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(contactId)});

そしてここに例外があります

android.database.sqlite.SQLiteException: 不明なエラー (コード 0): android.database.CursorWindow.nativeGetString(Native Method) で BLOB を文字列に変換できません android.database.CursorWindow.getString(CursorWindow.java:434) で android .database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) com.android.providers.contacts.DataRowHandler.getAugmentedValues(DataRowHandler.java:332) com.android.providers.contacts.DataRowHandlerForStructuredName.update(DataRowHandlerForStructuredName.java:70) ) com.android.providers.contacts.ContactsProvider2.updateData(ContactsProvider2.java:4507) で com.android.providers.contacts.ContactsProvider2.updateData(ContactsProvider2.java:4490) で com.android.providers.contacts.ContactsProvider2. updateInTransaction(ContactsProvider2.java:3875) com.android.providers.contacts.AbstractContactsProvider.update(AbstractContactsProvider.java:143) で com.android.providers.contacts.ContactsProvider2.update(ContactsProvider2.java:2061) で android.content.ContentProvider$Transport.update (ContentProvider.java:235) android.content.ContentResolver.update(ContentResolver.java:990) で

4

1 に答える 1

0

写真を削除する方法は次のとおりです(この投稿に基づく):

ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);

builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?",
        new String[] { ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE });
builder.withValue(Integer.toString(id),ContactsContract.CommonDataKinds.Photo.PHOTO, (byte[0])null);

final ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(builder.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
于 2013-06-04T11:22:13.297 に答える