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

在自己去实现更新联系人头像是经常遇到更新联系人头像失败的问题

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

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

我们只需要调用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);
                }
            }
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值