在我的代码中,我更新了联系信息,包括姓名、地址、电子邮件和照片。当联系人没有照片时一切OK。但是在为联系人分配照片后,我得到 android.database.sqlite.SQLiteException: unknown error: Unable to convert BLOB to string on each update operation。
我将照片添加到联系人的代码
Bitmap bit =getBitmap();
ByteArrayOutputStream streamy = new ByteArrayOutputStream();
bit.compress(CompressFormat.PNG, 0, streamy);
byte[] photo = streamy.toByteArray();
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
try {
if (getPhotoUri(rawContactId) != null) {
ContactHelper.context.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values,
String.format("%s = ?", ContactsContract.Data.RAW_CONTACT_ID), new String[] {String.format("%d", rawContactId)});
} else {
ContactHelper.context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}
} catch (Exception ex) {
ex.printStackTrace();
}
我的代码更改联系人姓名
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add( ContentProviderOperation.newUpdate( Data.CONTENT_URI )
.withSelection( Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "'",
new String[] { String.valueOf( rawContactId ) } )
.withValue( ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.getName() )
.build() );
try {
ContentResolver cr = context.getContentResolver();
cr.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}