получение и сохранение адреса электронной почты для Android

1

Я новичок в android. Поэтому я прошу вас проявить терпение. Я пытаюсь написать приложение, в котором при нажатии кнопки открывается API контактов. Затем пользователь выбирает контакт. Затем я хочу получить выбранный контакт в "onAcitvityResult (int reqcode, int rescode, Intent data)". Есть ли способ сделать это, не получив Uri и запросив его через всю базу данных? Это мой код, в котором начинается второе действие:

public void onClick(View v) {
            Log.d(TAG, "contact button clicked");
            Toast.makeText(ctx, "Contact button clicked",
                    Toast.LENGTH_SHORT).show();
            Intent contacts = new Intent(Intent.ACTION_GET_CONTENT,Contacts.CONTENT_URI);
            contacts.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
            startActivityForResult(contacts,1);
        }

Я правильно использую "Contacts.CONTENT_URI" и "Intent.ACTION_GET_CONTENT"?

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

И вот где я имею дело с результатом деятельности:   protected void onActivityResult (int requestCode, int resultCode, Intent data) {       super.onActivityResult(requestCode, resultCode, data);       String email = ""; long id;       if (requestCode == 1) {           if (resultCode == Activity.RESULT_OK) {

            // get the contact ID
            Uri contacturi= data.getData();
            Cursor c= getContentResolver().query(contacturi,null,null,null,null);
            id = c.getLong(c.getColumnIndex(ContactsContract.Contacts._ID));
            c.close();

            // get the data package containing the email address for the contact
            c=getContentResolver().query(ContactsContract.Data.CONTENT_URI,
                    new String[]{Email.DATA1}, 
                    ContactsContract.Data.CONTACT_ID + "=? AND " + Email.MIMETYPE + "=?",
                    new String[]{String.valueOf(id), Email.CONTENT_ITEM_TYPE}, null);
            email=c.getString(c.getColumnIndex(Email.DATA1));
            Log.d(TAG, "email is" + email);
        }
    }
    else {
        Log.d(TAG, "requestCode is not 1");
    }
    EditText ctext= (EditText) findViewById(R.id.contacttxt);
    ctext.append(email);
    Log.d(TAG, "onActivityResult() ends");
}

Я получаю исключение во время выполнения, говорящее о том, что "отказ от предоставления результата". Должен ли я включать некоторый метод setResult()? Заранее благодарю вас.

  • 0
    примеры кода было бы здорово.
  • 0
    я должен использовать приемник вещания? это будет иметь какое-то значение? Любое понимание будет оценено.
Показать ещё 3 комментария
Теги:
email
contactscontract

1 ответ

0
Лучший ответ

Я получил это:) Вы должны добавить c.moveToFirst(); два раза, после двух инициализаций как 2 курсора. Но я не понимаю, почему. Может ли кто-нибудь объяснить это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню