2011-01-04 2 views
0

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

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»?

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

И здесь я имею дело с результатом от деятельности: защищаемого ничтожной onActivityResult (INT requestCode, INT ResultCode, Намерение данные) { super.onActivityResult (requestCode, ResultCode, данные); String email = ""; long id; если (requestCode == 1) { если (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

Примеры кода были бы замечательными. – Brahadeesh

+0

Должен ли я использовать широковещательный приемник? это будет иметь какое-то значение? любое понимание будет оценено по достоинству. – Brahadeesh

+0

Я попытался отладить и выявил проблему. Он находится в этой строке: id = c.getDouble (c.getColumnIndexOrThrow (ContactsContract.Contacts._ID)); – Brahadeesh

ответ

0

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

Смежные вопросы