您的位置:首页 > 移动开发 > Android开发

Android 更新联系人头像失败问题

2016-09-22 18:52 295 查看
在自己去实现更新联系人头像是经常遇到更新联系人头像失败的问题

现象:联系人头像字段若已经存储头像数据可以正常更新,若当前修改的联系人头像不存在,则会出现更新失败的情况;

原因:当联系人已经存在联系人头像时,存储联系人头像二进制字段已经占位,即表示数据库中已经存在该条记录,

我们只需要调用getContentResolver().update()方法更新头像,若联系人头像不存在,用户新增头像需要调用

getContentResolver().insert方法插入头像;
实例参考代码:

String phoneWhere = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId;
Cursor phoneCursor = mView.getCtx().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, phoneWhere , null, null);
if(phoneCursor.moveToNext()){
Long photoId = phoneCursor.getLong(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_ID));
if(bm != null){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] data = baos.toByteArray();
//更新
if(photoId > 0){
values.clear();
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, data);
//            values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
String wherebm =
ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "=? ";
//rawContactsId -> contactId
String[] selectionArgsbm = new String[]{rawContactsId, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE};
int id = mView.getCtx().getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, wherebm,
selectionArgsbm);
}else{
//插入
//保存联系人头像
values.clear();
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactsId);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, data);
values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
mView.getCtx().getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  联系人 更新头像