我正在开发一个电话簿应用程序。我正在尝试检索联系人图片。首先,我检索了所有的联系人,然后拿走每个contact_id并在照片表上进行查询以获取图片。但是,查询所有图片的联系人需要永远。在我的模拟器中有超过1000个联系人,因此,照片桌上的1000多次点击被触发。那么,有没有办法加入这两个表并在一个查询中获取数据?
以下是我的代码。但我知道错了。刚试了一下。请有人纠正。
String[] projection = new String[]{Contacts._ID, Contacts.DISPLAY_NAME};
String joinCondition = "ContactsContract.Contacts._ID=ContactsContract.CommonDataKinds.Photo.CONTACT_ID";
ContentResolver cr = context.getContentResolver();
Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
Uri fillUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
Cursor cur = cr.query(contactUri, projection,
joinCondition, null, Contacts.DISPLAY_NAME);
THX! 拉胡
答案 0 :(得分:2)
您应该在列表适配器的getView方法中检索照片缩略图。这已经过优化,因此您只需处理需要在屏幕上显示的记录。所以,即使你有成千上万的联系人,你最多也要一次查询一小撮。
答案 1 :(得分:0)
您可以尝试以下方法:
public final String[] columns = {ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_THUMBNAIL_URI};
Cursor c = contentResolver.query(Contacts.CONTENT_URI, columns, where, args, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
这应该会返回一个包含所有联系人及其图片的光标