【问题标题】:Programmatically remove contact picture from Android以编程方式从 Android 中删除联系人图片
【发布时间】:2012-12-22 00:14:33
【问题描述】:

我正在尝试通过代码删除联系人图片。我通过将 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):无法将 BLOB 转换为字符串 在 android.database.CursorWindow.nativeGetString(Native Method) 在 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)

【问题讨论】:

    标签: android-contacts


    【解决方案1】:

    以下是删除照片的方法(基于this post):

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2013-08-11
      • 1970-01-01
      • 2021-01-22
      相关资源
      最近更新 更多