Получить все контакты и их данные (например, почтовый адрес) в одном запросе OUTER JOIN - PullRequest
3 голосов
/ 01 мая 2011

Я знаю, как получить контактные данные для определенных контактов.Тем не менее, я не могу найти способ получить все контакты, а также некоторые их детали в одном запросе.Следующий код получает все контакты , имеющие почтовый адрес:

  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 ]

4 голосов
/ 20 ноября 2012

, если у вас есть контактный идентификатор и вы хотите получить почтовый адрес, используйте это:

         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();                   
3 голосов
/ 01 мая 2011

Вся контактная информация в Android 2.0 хранится в одной таблице базы данных.Таким образом, вы можете получить всю необходимую вам информацию в одном запросе:

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

Просто переберите данные и проверьте столбец Data.MIMETYPE.Например, если этот столбец имеет значение StructuredPostal.CONTENT_ITEM_TYPE, вы можете получить StructuredPostal поля из этого столбца.

...