3

Each many examples (website, tutorial, ebook...), when we need to see Phone number of one contact ID, we need to requery like below code:

Cursor contactCursor = getContentResolver().query(uri, null, null, null, null);         
if (contactCursor.moveToFirst()){
            id = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.Contacts._ID));
        }
        contactCursor.close();

        //CHOOSE MOBILE PHONE OF CONTACT_ID
        Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                                        new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
                                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id + " AND " + ContactsContract.CommonDataKinds.Phone.TYPE+ "=" +ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE ,
                                                        null, null);

But, If I query directly at one contact uri and filter column _ID = contactID. I will meet error at query. Here my code:

String[] projector = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER};
        String selection = ContactsContract.CommonDataKinds.Phone.TYPE + "=" + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
        Cursor phoneContact = getContentResolver().query(uri, projector, selection, null, null);

Notes: uri object in above code return when someone choose one contact from contact list.

@Edit: here my error I receive: Here my error:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r2-354F574135474F2741334D352743/2 flg=0x1 }} to activity {com.basic/com.data.SMSContactApp}: java.lang.IllegalArgumentException: Invalid column data1

Thanks :)

hqt
  • 29,632
  • 51
  • 171
  • 250
  • 1
    @zapl I have added my error. I don't think it's sql grammar error. Please watch it for me. thanks :) – hqt Mar 12 '12 at 13:54
  • 1
    "data1" (=`ContactsContract.CommonDataKinds.Phone.NUMBER`) does not exist in the database when you query with this Uri. You might need to use `ContactsContract.CommonDataKinds.Phone.CONTENT_URI` as Uri – zapl Mar 12 '12 at 14:06
  • 1
    @zapl Oh, as you say, so in table of each `uri` contact doesn't contain Phone Number column ? Can you tell me what columns this table contains, please. I google but no result for my query Thanks :) – hqt Mar 12 '12 at 14:11
  • 1
    You can print out the columns or try to find that in the API docs. `Cursor c = getContentResolver().query(uri, null, null, null, null);String[] names = c.getColumnNames();for (String name : names) Log.d("lala", "column:" + name); c.close();` – zapl Mar 12 '12 at 14:23

0 Answers0