получение и сохранение адреса электронной почты для Android - PullRequest
1 голос
/ 04 января 2011

Я новичок в 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");
}

Я получаю исключение во время выполнения о том, что failure delivering result.
Должен ли я включить некоторые setResult() метод ??
Заранее спасибо.

1 Ответ

0 голосов
/ 05 января 2011

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

...