我有一个listview适配器,我在newView方法中尝试以下操作:
@Override public View newView(Context context,Cursor cursor,ViewGroup parent) { final LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(layout,parent,false); long contactId = Long.valueOf(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); boolean hasPhone = Boolean.parseBoolean(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); String thumbnailUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI)); TextView name_text = (TextView) v.findViewById(R.id.name_entry); if (name_text != null) { name_text.setText(contactName); } name_text.setTag(new Contact(contactId,hasPhone)); ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail); if (thumbnailUri != null) { thumbnail.setImageURI(Uri.parse(thumbnailUri)); } else { thumbnail.setImageResource(R.drawable.ic_launcher); } return v; }
但是当我尝试解析存储在thumbnailUri中的Uri时,我收到以下错误:
08-09 01:58:38.619: I/System.out(1471): resolveUri Failed on bad bitmap uri: content://com.android.contacts/contacts/1/photo
我这样做错了吗?任何帮助将不胜感激!
解决方法
private Uri getPhotoUriFromID(String id) { try { Cursor cur = getContentResolver() .query(ContactsContract.Data.CONTENT_URI,null,ContactsContract.Data.CONTACT_ID + "=" + id + " AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'",null); if (cur != null) { if (!cur.moveToFirst()) { return null; // no photo } } else { return null; // error in cursor process } } catch (Exception e) { e.printStackTrace(); return null; } Uri person = ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI,Long.parseLong(id)); return Uri.withAppendedPath(person,ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); }
这是您需要传递联系人ID的功能,您将获得可以在图像视图中轻松设置的图像的URI.
使用此功能的响应uri,如imageView.setImageURI(uri)
希望它能为您的代码工作.