在我的代碼中,我更新了聯繫人信息,包括姓名,地址,電子郵件和照片。當聯繫人沒有照片時,一切正常。但爲聯繫人分配照片後,我得到android.database.sqlite.SQLiteException:未知錯誤:無法將BLOB轉換爲字符串在每個更新操作。SQLiteException當聯繫人有照片時,無法將BLOB轉換爲字符串。 Android
我添加圖片的代碼聯繫
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();
}
你的模式是什麼樣的?你對數據庫中的照片有什麼樣的數據類型?我敢打賭它沒有定義或者是一個字符串。 – HalR 2013-04-11 02:38:59
我使用標準的android聯繫人數據庫。文檔說這個datacolumn的類型爲String http://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html#DATA15 – 2013-04-11 06:40:16