разрешить почтовый адрес к имени контакта - PullRequest
1 голос
/ 22 июня 2010

Предполагается, что в моей адресной книге сохранен контакт, который называется TomTasche с почтовым адресом stackoverflow@gmail.com. Как я могу получить имя контакта, если я знаю только почтовый адрес?

Я уже задавал похожие вопросы о получении псевдонима контакта здесь , но если я изменю этот код для запроса почты, вот так:

Cursor cur = context.getContentResolver().query(Email.CONTENT_URI, new String[] {Email.DISPLAY_NAME, Email.TYPE, Email.CONTACT_ID}, Email.DATA + " = " + "stackoverflow@gmail.com", null, null);

final int nameIndex = cur.getColumnIndex(Email.DISPLAY_NAME);
final int typeIndex = cur.getColumnIndex(Email.TYPE);
final int idIndex = cur.getColumnIndex(Email.CONTACT_ID);

if (cur.moveToFirst()) {
    name = cur.getString(nameIndex);
    type = cur.getString(typeIndex);
    id = cur.getString(idIndex);
} else {
    name = UNKNOWN;
}

он принудительно закрывается, и logcat сообщает мне, что рядом с @ gmail есть синтаксическая ошибка.

06-22 09:21:14.260: ERROR/DatabaseUtils(110): Writing exception to parcel
06-22 09:21:14.260: ERROR/DatabaseUtils(110): android.database.sqlite.SQLiteException: near "@gmail": syntax error: , while compiling: SELECT display_name, data2, contact_id FROM view_data_restricted data WHERE (1 AND mimetype = 'vnd.android.cursor.item/phone_v2') AND (data1 = "Tom" <stackoverflow@gmail.com>)

Интересно, что кажется, что запрос в порядке. Logcat распечатывает имя контакта:

06-22 09:21:14.260: [...] AND (data1 = "Tom" <stackoverflow@gmail.com>)

Итак, как я могу получить имя?

Спасибо
Том

редактирование:

Синтаксическая ошибка вызвана отсутствием кавычек, , но курсор все равно возвращает ноль.

1 Ответ

6 голосов
/ 22 июня 2010

Используйте Phone.DISPLAY_NAME вместо Email.DISPLAY_NAME в query() и getColumnIndex() (первые 2 строки).

edit:

Также есть специальныеURI для поиска по электронной почте: Email.CONTENT_LOOKUP_URI.Это кажется более удобным в использовании (не нужно ставить квоты или вручную составлять аргумент выбора, как в вашем коде):

Uri uri = Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode("stackoverflow@gmail.com"));
Cursor cur = getContentResolver().query(uri, new String[]{Email.CONTACT_ID, mail.DISPLAY_NAME, Email.TYPE, Phone.DISPLAY_NAME}, null, null, null);
...