在一个OUTER JOIN查询中获取所有联系人及其详细信息(例如邮政地址)

时间:2011-05-01 13:12:56

标签: android contacts contactscontract

我知道如何检索特定联系人的联系人数据。但是,我找不到在单个查询中获取所有联系人以及他们的一些详细信息的方法。以下代码会使所有联系人拥有邮寄地址:

  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,还是我需要创建自定义外连接查询?关于如何提示?

2 个答案:

答案 0 :(得分: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();                   

答案 1 :(得分:3)

Android 2.0中的所有联系信息都存储在单个数据库表中。因此,您可以在一个查询中获得所需的所有信息:

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

只需遍历数据并检查Data.MIMETYPE列。例如,如果此列的值为StructuredPostal.CONTENT_ITEM_TYPE,那么您可以从此列中获取StructuredPostal个字段。