Не удается получить письмо от 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());
}
}