首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这种情况下更新联系人照片不起作用?

为什么在这种情况下更新联系人照片不起作用?
EN

Stack Overflow用户
提问于 2016-08-21 05:24:58
回答 1查看 113关注 0票数 0

背景

我想更改地址簿中特定联系人的照片。

问题所在

我对这些联系人作了一些询问,因此:

代码语言:javascript
复制
final Cursor phonesCursor = context.getContentResolver()
            .query(ContactsContract.Data.CONTENT_URI,null,null,null,null);

然后,在游标上方的循环中,我尝试更新第一个联系人的照片:

代码语言:javascript
复制
    if (phonesCursor != null) {
        while (phonesCursor.moveToNext()) {
            final int rawContactId = phonesCursor.getInt(phonesCursor
                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID));
            final String phoneNumber = phonesCursor.getString(phonesCursor
                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String name = phonesCursor.getString(phonesCursor.getColumnIndex(Phone.DISPLAY_NAME));
            phonesMap.put(rawContactId, phoneNumber);
            Log.d("AppLog", "trying to set image for " + name);
            int photoRow = phonesCursor.getInt(phonesCursor.getColumnIndex(Phone._ID));
            phonesCursor.close();
            final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher);
            ByteArrayOutputStream streamy = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.PNG, 0, streamy);
            byte[] photo = streamy.toByteArray();

            final 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);
            final int update = context.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + photoRow, null);
            Log.d("AppLog", "update result:" + update);
            break;
        }
    }

问题是,结果是"update“返回"1",所以它应该是成功的,但是当我到达联系人时,我看不到这张照片。

我试过的

我尝试使用批处理(使用ArrayList和getContentResolver().applyBatch ),但它也没有工作。

我还尝试更改更新调用,以标识我希望以不同方式更改的项(而不是使用RAW_CONTACT_ID )。它也不起作用。

问题

  1. 怎么会发生这种事?我该怎么做才能解决这个问题?
  2. 用新照片更新多个联系人的最佳方法是什么?
  3. 是否也可以使用我拥有的查询获取联系人的照片,而不需要额外的查询?我希望这样做是为了让我自己看看之前的接触是不同的。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 22:26:28

好的,正确的字段是"LOOKUP_KEY“:

代码语言:javascript
复制
int lookupKeyIdx = phonesCursor.getColumnIndex(Phone.LOOKUP_KEY);
final String lookupKey = phonesCursor.getString(lookupKeyIdx);
...
final int update = context.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, Phone.LOOKUP_KEY + " = " + lookupKey , null);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39061080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档