3

特定の連絡先の連絡先データを取得する方法を知っています。ただし、すべての連絡先とその詳細の一部を 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 を使用して実行できますか? または、カスタムの外部結合クエリを作成する必要がありますか? 方法に関するヒントはありますか?

4

2 に答える 2

4

連絡先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();                   
于 2012-11-20T10:36:17.737 に答える
3

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

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

Data.MIMETYPEデータを反復して列をチェックするだけです。たとえば、この列に値がある場合、この列からフィールドをStructuredPostal.CONTENT_ITEM_TYPE取得できます。StructuredPostal

于 2011-05-01T13:24:54.710 に答える