Проблема с Email ContentResolver

Я использую следующий код для создания списка адресов электронной почты на устройстве для отображения на ListActivity. В настоящее время я могу получить адреса электронной почты в порядке, но они появляются в форме: null ([email protected]) вместо name ([email protected]), что не идеально. Код, который я использую, также должен извлекать имена:

Cursor c = getContentResolver().query(Email.CONTENT_URI,
        new String[]{Email.CONTACT_ID, Email.DISPLAY_NAME, Email.DATA},
        null, null, null);

addresses = new String[c.getCount()];
try{
    c.moveToFirst();
    for(int i = 0;i<c.getCount();i++){
        addresses[i] = c.getString(1) + " (" + c.getString(2) + ")";
        c.moveToNext();
    }
} finally {
    c.close();
}

Кто-нибудь знает, что я делаю неправильно?


person fredley    schedule 06.03.2011    source источник


Ответы (3)


Я использовал это (определенно работает на Android 2.2 на Incredible; никаких обещаний на 2.3).

String nameAndEmailOrder = "lower(" + ContactsContract.Data.DISPLAY_NAME + ") ASC";
String[] nameAndEmailProjection = new String[] {
        ContactsContract.Data.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Email.DATA }

    Cursor emails = activity.managedQuery(
            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            nameAndEmailProjection, null, null, nameAndEmailOrder);

    emails.moveToFirst();
    int nameColumn = emails.getColumnIndex(
            ContactsContract.Data.DISPLAY_NAME);
    int emailColumn = emails.getColumnIndex(
                    ContactsContract.CommonDataKinds.Email.DATA);
    do {
        Log.d("test", String.format("%s (%s)", emails.getString(nameColumn), emails.getString(emailColumn)));
    } while (emails.moveToNext());
person Yoni Samlan    schedule 14.03.2011

Попробуйте этот запрос:

Cursor c = managedQuery(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.DATA},
            null, null, null);
person skyman    schedule 06.03.2011
comment
На какой версии андроид? Я немного напортачил с классами, проверьте, импортировали ли вы android.provider.ContactsContract.Contacts, а не android.provider.Contacts - person skyman; 08.03.2011

Попробуйте этот запрос:

Cursor c = getContentResolver().query(Data.CONTENT_URI,
        new String[]{Data.CONTACT_ID, Data.DISPLAY_NAME, Email.ADDRESS},
        Data.MIMETYPE + "=?", new String[] {Email.CONTENT_TYPE}, null);

addresses = new String[c.getCount()];
try{
    c.moveToFirst();
    for(int i = 0;i < c.getCount();i++){
        addresses[i] = c.getString(1) + " (" + c.getString(2) + ")";
        c.moveToNext();
    }
} finally {
    c.close();
}

Примечание. Email.ADDRESS будет преобразован в Data.DATA1.

person Karan    schedule 14.03.2011
comment
Я предполагаю, что мне пришлось заменить Email.ADDRESS на Data.DATA1, так как это не скомпилирует первое. найдено 0 результатов :-( - person fredley; 16.03.2011