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

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

кто-нибудь знает, как получить этот список и отсортировать..

Пожалуйста, помогите мне и спасибо заранее.

Я использую этот код.

        MatrixCursor matCur = new MatrixCursor(new String[] { Contacts._ID,
                Contacts.DISPLAY_NAME, "photo_id", "starred" });
        Cursor cEmail = WP7Main.this.managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        cEmail.moveToFirst();
        if (cEmail.moveToFirst()) 
        {
            // String name =
            // cursor.getString(cursor.getColumnIndexOrThrow(People.NAME));

            String contactId = cEmail.getString(cEmail.getColumnIndex(ContactsContract.Contacts._ID));

            Cursor emails = WP7Main.this.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            null,ContactsContract.CommonDataKinds.Email.CONTACT_ID+ " = " + contactId, null, null);

            String emailAddress = "";
            while (emails.moveToNext()) 
            {
                // This would allow you get several email addresses

                if (emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)) != null)
                {
                    String[] columnValues = {
                            cEmail.getString(cEmail
                                    .getColumnIndex("_id")),
                                    cEmail.getString(cEmail
                                    .getColumnIndex("display_name")),
                                    cEmail.getString(cEmail
                                    .getColumnIndex("photo_id")),
                                    cEmail.getString(cEmail
                                    .getColumnIndex("starred")) };
                    matCur.addRow(columnValues);

                }

            }
            emails.close();
        }

person Niranj Patel    schedule 24.03.2011    source источник
comment
с какой проблемой вы столкнулись? например, получение записей или их сортировка, о чем вы даже не упомянули в этом сообщении, а также stackoverflow.com/questions/5205999/   -  person ingsaurabh    schedule 24.03.2011
comment
этот вопрос задавался не мной.   -  person Niranj Patel    schedule 24.03.2011
comment
Я знаю, но вы не упомянули там также, в чем именно заключается ваша проблема   -  person ingsaurabh    schedule 24.03.2011
comment
мои проблемы в том, чтобы получить контакт по электронной почте, а также отсортировать их   -  person Niranj Patel    schedule 24.03.2011
comment
хорошо опубликуйте свой код, что вы пытаетесь?   -  person ingsaurabh    schedule 24.03.2011


Ответы (2)


Попробуй это:

/**
 * @return A managed cursor of email contacts for the given activity.
 */
public static Cursor buildFilteredEmailCursor(Activity activity) {
    final String my_sort_order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    String my_selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
    String[] eproj = new String[]{
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Email.DATA};
    Uri uri = android.provider.ContactsContract.CommonDataKinds.Email.CONTENT_URI;
    return activity.managedQuery(uri, eproj, my_selection, null, my_sort_order);
}
person Melinda Green    schedule 26.12.2011
comment
ВНИМАНИЕ: я проголосовал за это несколько часов назад, но вернулся, чтобы вернуть этот голос. Вы должны понимать, что с помощью этого ответа вы запрашиваете таблицу CommonDataKinds.Email. Даже если вы говорите выбрать ContactsContract.Contacts._ID, это просто преобразуется в столбец _id, что в случае с таблицей электронной почты означает, что он будет связан с электронной почтой, а НЕ с идентификатором контакта. Опять же, остерегайтесь этого возможного ответа, потому что он может привести к несоответствию, если вы не знаете, что делаете. - person Chayemor; 12.03.2014

Используйте этот запрос:

Cursor c = getContentResolver().query(Data.CONTENT_URI,
        new String[]{Data.CONTACT_ID, Data.DISPLAY_NAME, Email.ADDRESS},
        Data.MIMETYPE + "=?", new String[] {Email.CONTENT_TYPE}, Data.DISPLAY_NAME /* use Email.ADDRESS if you want to sort it using that*/);

person Karan    schedule 24.03.2011
comment
когда я использую это, появляется эта ошибка java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 - person Niranj Patel; 24.03.2011
comment
Есть ли в вашей базе контакты? - person Karan; 24.03.2011
comment
Это работает для меня. Не могли бы вы добавить весь код, который вы используете? - person Karan; 24.03.2011
comment
Я тестирую это на Froyo (2.2) - person Karan; 24.03.2011
comment
Используйте Data.DATA1 вместо Email.ADDRESS. - person Karan; 24.03.2011
comment
java.lang.IndexOutOfBoundsException: недопустимый индекс 0, размер равен 0 - person Niranj Patel; 24.03.2011