1つの外側の結合クエリですべての連絡先とその詳細(郵便アドレスなど)を取得します

StackOverflow https://stackoverflow.com/questions/5848573

質問

特定の連絡先の連絡先データを取得する方法を知っています。ただし、すべての連絡先とその詳細の一部を1回のクエリで取得する方法は見つかりません。次のコードはすべての連絡先を取得します 持っている 郵便住所:

  Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
  String[] projection = new String[] {
    StructuredPostal._ID,
    StructuredPostal.LOOKUP_KEY,
    StructuredPostal.DISPLAY_NAME,
    StructuredPostal.STREET,
    StructuredPostal.CITY
  };
  String sortOrder = StructuredPostal.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
  Cursor c = getContentResolver().query(uri, projection, null, null, sortOrder);

しかし、私に必要なのはです 全て 連絡先、郵便住所があるかどうかにかかわらず。これは、contatsContract APIを使用して実行可能ですか、それともカスタム外部結合クエリを作成する必要がありますか?どのようにヒントはありますか?

役に立ちましたか?

解決

Android 2.0のすべての連絡先情報は、単一のデータベーステーブルに保存されます。したがって、必要なすべての情報を1つのクエリで取得できます。

Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
    null, null, null, sortOrder);

データを繰り返してチェックします Data.MIMETYPE 桁。たとえば、この列にある場合 StructuredPostal.CONTENT_ITEM_TYPE 価値、それからあなたは得ることができます StructuredPostal この列のフィールド。

他のヒント

連絡先IDがあり、郵便アドレスを取得する場合は、これを使用してください。

         Uri postal_uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
         Cursor postal_cursor  = getContentResolver().query(postal_uri,null,  ContactsContract.Data.CONTACT_ID + "="+contactId.toString(), null,null);
          while(postal_cursor.moveToNext())
            {
             String Strt = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.STREET));
             String Cty = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.CITY));
             String cntry = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.COUNTRY));
            } 
            postal_cursor.close();                   
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top