2012-02-19 10 views
2

私は電話帳アプリを開発しています。連絡先の画像を取得しようとしています。最初はすべての連絡先を取得してから、それぞれのcontact_idを取得し、写真を取得するために写真テーブルのクエリを実行しました。しかし、それは写真のためにすべての連絡先を照会することを永遠に取っています。私のエミュレータでは1000人以上の連絡先があるので、写真のテーブルには1000以上のヒットが発生しています。ですから、2つのテーブルを結合して1つのクエリでデータを取得する方法はありますか?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"); 

これはあなたがリストアダプタのGetViewメソッドで写真のサムネイルを取得する必要があるすべての連絡先とカーソルと自分の写真

+0

私が間違っていない場合は、結果から写真のURIを使用して写真テーブルへのクエリを実行する必要があります。私が始めた場所。 – rahul

+0

サムネイルURIを取得したら、サムネイルを表示するようにイメージビューを設定するだけで済みます。それはあなたが探しているものではありませんか? – Asahi

+0

私はサムネイルuriを取得することに同意します。しかしもう一度、実際のBLOBを取得するためにopenContactPhotoInputStream()を呼び出したり、クエリを使用したりする必要があります。これは動作していますが、起動するクエリが1000を超えるため、時間がかかることがあります。一度にすべての写真を取得する方法はありますか? – rahul

1

を返す必要があります。これはすでに最適化されているため、画面に表示する必要のあるレコードのみを処理する必要があります。だから、たとえあなたが何千という連絡先を持っていても、一度に一度に一握りの人に質問しなければならないでしょう。

関連する問題