2012-02-19 100 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方法中的照片縮略圖的光標。這已經過優化,因此您只需處理需要在屏幕上顯示的記錄。因此,即使您擁有數千個聯繫人,您最多也只能一次查詢一小撮。

相關問題