Android 访问联系人照片-联系人ID和照片位置不匹配
我有一个列表视图,我想分别在ImageView和TextView中显示联系人图片和联系人姓名。我能够生成带有联系人姓名的ListView,但在图像方面遇到了问题。注意:我已经在这里和网上阅读了数百篇文章,没有任何内容描述我正在发现的问题或可能的解决方案 在所有访问照片的方法中,没有一种方法允许您使用ContactsContract.Contacts中的照片URI进行访问。所有方法都涉及访问联系人ID,使用该ID使用ContentUris.withAppendedId生成联系人URI,然后使用该ID生成InputStream,等等 这是我的问题。照片URI和联系人ID不匹配。例如: 约翰·史密斯 联系人ID=905 照片_URI=content://com.android.contacts/contacts/270/photo 这导致几乎没有联系人的照片出现,事实上,57张照片中只有2张,而那些出现的照片都是错误的联系人。也就是说,根据上面的例子,John的照片显示在Mark旁边,因为Mark的联系人ID=270。其他55个联系人没有任何照片展示,因为没有匹配的照片和身份证,尽管其中有30多个确实有照片 第二个问题是一些PHOTO_URI是不同的路径结构,例如 content://com.android.contacts/display_photo/3 我在这里完全不知所措。这是我的自定义适配器中试图访问照片的bindView()代码Android 访问联系人照片-联系人ID和照片位置不匹配,android,listview,contacts,photo,Android,Listview,Contacts,Photo,我有一个列表视图,我想分别在ImageView和TextView中显示联系人图片和联系人姓名。我能够生成带有联系人姓名的ListView,但在图像方面遇到了问题。注意:我已经在这里和网上阅读了数百篇文章,没有任何内容描述我正在发现的问题或可能的解决方案 在所有访问照片的方法中,没有一种方法允许您使用ContactsContract.Contacts中的照片URI进行访问。所有方法都涉及访问联系人ID,使用该ID使用ContentUris.withAppendedId生成联系人URI,然后使用该I
public void bindView(View view, Context context, Cursor cursor) {
ContentResolver cr = context.getContentResolver();
//cursor is contactsCursor from FriendsContactFragment
//{CONTACTS_ID, DISPLAY_NAME, PHOTO_URI, GROUP_ROW_ID, LOOKUP_KEY}
//get the ViewHolder object saved in newView()
ViewHolder viewHolder = (ViewHolder) view.getTag();
long contactId = cursor.getLong(0);
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
InputStream photoData = ContactsContract.Contacts.openContactPhotoInputStream(cr, contactUri);
Bitmap bm = BitmapFactory.decodeStream(photoData);
if(bm != null){
viewHolder.imageView.setImageBitmap(bm);
}else{
viewHolder.imageView.setImageResource(R.drawable.ic_friends_c);
}
//adding additional info to output for debugging
viewHolder.textView.setText(cursor.getString(1) + "\nCONTACT_ID: " + cursor.getString(0) + "\nCONTACT_URI: " + contactUri + "\nPHOTO_URI: " + cursor.getString(2) + "\nphotoData: " + photoData);
}
我现在面临着完全相同的问题。你找到解决办法了吗?我不得不把这个项目搁置一段时间,但还没能恢复。不管怎么说,这里从来没有提供过任何帮助,我还没有独自解决这个问题。如果您或其他任何人已经或确实解决了此问题,请填写!:)