2012-02-19 78 views
2

我正在开发电话簿应用程序。我正在尝试检索联系人图片。起初,我检索了所有的联系人,然后拿走了每个contact_id并在照片桌上做了一个查询来获取照片。但是,查询图片的所有联系人需要花费很长时间。在我的模拟器中,有超过1000个联系人,因此,在照片桌上的1000多次点击正在被解雇。那么,有没有办法连接这两个表并在单个查询中获取数据?在Android中加入联系人和照片表

下面是我的代码来做到这一点。但我知道它错了。刚刚给了它一个镜头。请有人纠正它。


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

,你可以尝试以下方法:

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

,应返回你所有的联系人和他们的照片

+0

如果我没有错,我将不得不使用结果中的照片uri对照片表进行查询。我又开始了。 – rahul 2012-02-19 20:06:53

+0

一旦你有一个缩略图URI,你只需要设置你的图像视图来显示缩略图。这不是你想要的吗? – Asahi 2012-02-19 21:08:27

+0

我同意我会得到缩略图uri。但是,我将不得不去查询或使用openContactPhotoInputStream()来获取实际的blob。这是有效的,但由于有超过1000个查询需要触发,所以很长一段时间。有没有办法一次检索所有照片? – rahul 2012-02-20 17:12:40

1

你应该检索列表中的适配器的getView方法中的照片缩略图的光标。这已经过优化,因此您只需处理需要在屏幕上显示的记录。因此,即使您拥有数千个联系人,您最多也只能一次查询一小撮。