Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 访问联系人照片-联系人ID和照片位置不匹配_Android_Listview_Contacts_Photo - Fatal编程技术网

Android 访问联系人照片-联系人ID和照片位置不匹配

Android 访问联系人照片-联系人ID和照片位置不匹配,android,listview,contacts,photo,Android,Listview,Contacts,Photo,我有一个列表视图,我想分别在ImageView和TextView中显示联系人图片和联系人姓名。我能够生成带有联系人姓名的ListView,但在图像方面遇到了问题。注意:我已经在这里和网上阅读了数百篇文章,没有任何内容描述我正在发现的问题或可能的解决方案 在所有访问照片的方法中,没有一种方法允许您使用ContactsContract.Contacts中的照片URI进行访问。所有方法都涉及访问联系人ID,使用该ID使用ContentUris.withAppendedId生成联系人URI,然后使用该I

我有一个列表视图,我想分别在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()代码

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);


}

我现在面临着完全相同的问题。你找到解决办法了吗?我不得不把这个项目搁置一段时间,但还没能恢复。不管怎么说,这里从来没有提供过任何帮助,我还没有独自解决这个问题。如果您或其他任何人已经或确实解决了此问题,请填写!:)