1

I am writing a code to get email of a selected contact but as i select the contact and come back to main activity i can't get the email(The toast is not displayed)...

public static final int PICK_CONTACT = 1;

public void onclick(View view) {
    Intent intent1 = new Intent(Intent.ACTION_PICK,
            ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent1,PICK_CONTACT);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==PICK_CONTACT) {
        try {
            if(resultCode==Activity.RESULT_OK) {
                Uri uri=data.getData();
                String[] projection = new String[] {
                    ContactsContract.Contacts._ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Email.DATA
                };
                Cursor emailCur =
                    getContentResolver().query(uri, null, null, null,null);
                emailCur.moveToFirst();
                String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                String emailType = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                Toast.makeText(MainActivity.this,
                        "The email is" +email, Toast.LENGTH_LONG).show();
                emailCur.close();
            }
        }
        catch(Exception e) {
            e.getCause();
        }
    }
}
Edward Falk
  • 9,991
  • 11
  • 77
  • 112
user2429689
  • 149
  • 1
  • 3
  • 8

1 Answers1

1

You need to perform another query to retrieve the email address.
Check this answer (bottom part about email address), it is the same issue : get contact info from android contact picker

EDIT : Code example

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    // ADD IF STATEMENTS HERE TO CHECK the requestCode, resultCode and data

    Uri contactData = data.getData();
    Cursor c = getContentResolver().query(contactData, null, null, null, null);

    // has result
    if (c.moveToFirst()) {
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));

        // new query for the mail
        Cursor emailCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null);

        // has result
        if(emailCursor.moveToFirst()) {
            String email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
            String emailType = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));

            Log.d(getClass().getName(), "EMAIL = " + email);
        }

        emailCursor.close();
    }

    c.close();
}

And don't forget to add READ_CONTACTS permission in the manifest.

Community
  • 1
  • 1
lukasz
  • 3,121
  • 1
  • 21
  • 20