Search code examples
androidandroid-cursorphone-number

Android, cannot retrieve phone numbers using user id


I'm trying to retrieve the phone number of a user after selecting him in a picker activity.

This is the code to start the Activity:

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, Constants.COMMUNICATION_CONFIG_RESULT);

This is the code to retrive user name, id and phone number, it's used in a onActivityResult:

 Uri contactData = data.getData();

 ContentResolver cr = getContentResolver();
 Cursor cursor = cr.query(contactData, null, null, null, null);
 if (cursor.moveToFirst()) {
     String contactId =
                    cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
     String name = cursor.getString(
                    cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

      String hasPhone =
                    cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

      if (hasPhone.equalsIgnoreCase("1")) {

          Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
          phones.moveToFirst();
          String contactNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
          Log.i("phoneNUmber", "The phone number is "+ contactNumber);

       }
  }

I get always the user name and id, and the user has always the phone number, but the cursor phone is always empty, regardless of the user selected.

Why can't I get the phone numbers?


Solution

  • Found out the problem. It must be:

    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
    

    if then I query the phone number via

    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
    

    The problem was that I selected different fields for the query.