Не удается получить письмо от ContactsContract

Что бы я ни пытался, это не работает. Я пробовал поискать в Google и, используя множество примеров, опубликованных здесь ранее, я все еще получаю исключение indexOutOfBoundsException.

Вот мой фрагмент кода.

Uri contactData = data.getData();



                String[] mProjection =
                        {

                                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                                ContactsContract.CommonDataKinds.Phone.NUMBER,
                                ContactsContract.CommonDataKinds.Email.DATA

                        };



                Cursor c =  getContentResolver().query(contactData,mProjection, null, null, null);

                myEmail = c.getString(c.getColumnIndexOrThrow(mProjection[2]));

                Log.d("EMAIL RESULT", myEmail);

Может кто-нибудь сказать мне, что я делаю не так?

2 ответа

Аналогичный вопрос: Android - курсор не находит столбец

Кажется, вашему коду этого не хватает:

cursor.moveToFirst();

Этот код работает для меня:

    Cursor c;

    String[] projection = new String[]
            { ContactsContract.CommonDataKinds.Email._ID,
                    ContactsContract.CommonDataKinds.Email.DISPLAY_NAME_PRIMARY,
                    ContactsContract.CommonDataKinds.Email.ADDRESS
            };

    CursorLoader cursorLoader = new CursorLoader(
            this,
            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            projection,
            null,
            null,
            null);

    c = cursorLoader.loadInBackground();

    getEmails(c);

и ваш метод getEmails:

 private void getEmails(Cursor c) {
        ContentResolver cr = getContentResolver();
        if (c.moveToFirst()) {
            do {
                String contactID = c.getString(c.getColumnIndex(
                        ContactsContract.CommonDataKinds.Email._ID));
                String contactDisplayName =
                        c.getString(c.getColumnIndex(
                                ContactsContract.CommonDataKinds.Email.DISPLAY_NAME_PRIMARY));
                String contactEmail =
                        c.getString(c.getColumnIndex(
                                ContactsContract.CommonDataKinds.Email.ADDRESS));


            } while (c.moveToNext());
        }
    }
Другие вопросы по тегам