Android API 8, 10 ContactsContract.Data.HAS_PHONE_NUMBER no such column

The following request is executed on my device (API 15). API 8 or API 10 does not work in my emulator.

Here is the request:

Cursor contactsCur = getContentResolver().query( ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Data._ID, ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Organization.COMPANY, ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.Data.LOOKUP_KEY, ContactsContract.CommonDataKinds.Phone.NUMBER, Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CITY, ContactsContract.CommonDataKinds.StructuredPostal.STREET, ContactsContract.CommonDataKinds.StructuredPostal.REGION, ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE}, ContactsContract.Data.HAS_PHONE_NUMBER + " >? ", new String[] { "0" }, ContactsContract.Data.DISPLAY_NAME + " COLLATE NOCASE ASC"); 

Here is the exception that it throws: android.database.sqlite.SQLiteException: no such column: has_phone_number: , while compiling: SELECT _id, contact_id, display_name, data1, data2, lookup, data1, mimetype, mimetype, data7, data4, data8, data9 FROM view_data_restricted data WHERE (1) AND (has_phone_number >? ) ORDER BY display_name COLLATE NOCASE ASC

Oddly enough, the following code also does not work:

 Cursor contactsCur = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[] { ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER}, ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + " >? ", new String[] { "0" }, null); 

This gives: java.lang.IllegalArgumentException: Invalid column has_phone_number

http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html claims that ContactsContract.CommonDataKinds.Phone has access to HAS_PHONE_NUMBER From the android.provider.ContactsContract.ContactsColumns interface

To add to the weirdness, this query works:

 Cursor contactsCur = getContentResolver().query( ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Data.LOOKUP_KEY}, null, null, null); 

But this is not:

 Cursor contactsCur = getContentResolver().query( ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Data.HAS_PHONE_NUMBER}, null, null, null); 

ContactsContract.Data.LOOKUP_KEY comes from the same implicit union as ContactsContract.Data.HAS_PHONE_NUMBER !

Where am I going wrong?

+4
source share
1 answer

The main problem that you are facing is that the ContactsContract.CommonDataKinds.Phone.CONTENT_URI filters are automatically on has_phone_number=1 . Thus, you can be sure that everything that comes out of Phone.CONTENT_URI has a phone number. You can then filter this out by specifying if Phone.TYPE is one of Phone.TYPE_MOBILE or Phone.TYPE_WORK_MOBILE (for example) if you want to limit the type of your phone number.


For reference (note that has_phone_number not in the data/phones URI):

 Columns for content://com.android.contacts/contacts: - times_contacted - contact_status - custom_ringtone - has_phone_number - phonetic_name - phonetic_name_style - contact_status_label - lookup - contact_status_icon - last_time_contacted - display_name - sort_key_alt - in_visible_group - _id - starred - sort_key - display_name_alt - contact_presence - display_name_source - contact_status_res_package - contact_status_ts - photo_id - send_to_voicemail 

and

 Columns for content://com.android.contacts/data/phones: - data_version - phonetic_name - phonetic_name_style - contact_id - lookup - data12 - data11 - data10 - mimetype - data15 - data14 - data13 - display_name_source - data_sync1 - data_sync3 - data_sync2 - data_sync4 - account_type - custom_ringtone - status - data1 - data4 - data5 - data2 - data3 - data8 - data9 - group_sourceid - data6 - account_name - data7 - display_name - in_visible_group - display_name_alt - contact_status_res_package - is_primary - contact_status_ts - raw_contact_id - times_contacted - contact_status - status_res_package - status_icon - contact_status_icon - mode - version - last_time_contacted - res_package - _id - name_verified - status_ts - dirty - is_super_primary - photo_id - send_to_voicemail - name_raw_contact_id - contact_status_label - status_label - sort_key_alt - starred - sort_key - contact_presence - sourceid 
+5
source

All Articles