4

아래의 쿼리는 내 장치 (API 15)에서 제대로 실행됩니다. 이상하게도 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 Android API 8, 10 ContactsContract.Data.HAS_PHONE_NUMBER 해당 열이 없습니다.

, 다음 코드를 여기에

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"); 

그것이 발생하는 예외 : 그것은 여기

10. 쿼리입니다 API 8 또는 API를 실행 내 에뮬레이터에서 작동하지 않습니다 또한 작동하지 않습니다

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); 

그것은 산출 : java.lang.IllegalArgumentException: Invalid column has_phone_number

http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html이 쿼리가 작동 ContactsContract.CommonDataKinds.Phone

이 기묘에 추가하려면 인터페이스 android.provider.ContactsContract.ContactsColumns에서 HAS_PHONE_NUMBER에 액세스 할 수 있는지 상태 :

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

하지만이 일하지 않습니다 :

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

ContactsContract.Data.LOOKUP_KEYContactsContract.Data.HAS_PHONE_NUMBER과 동일한 암시 적 조인에서 온 것입니다!

어디로 잘못 가고 있습니까?

+0

. ContactsContract.Data.CONTENT_URI' 대신 'Contacts.CONTENT_URI'를 사용하십시오. 그러면 추가 열에 대한 implict 조인이 생성됩니다. – Codo

+0

'ContactsContract.Contacts.CONTENT_URI '로 변경하면'java.lang.IllegalArgumentException : 잘못된 열 contact_id'가 나타납니다. – gnub

+0

http://developer.android.com/reference/android/provider/ContactsContract.Data.html은' HAS_PHONE_NUMBER'는'ContactsContract.Contacts'와 함께 암시 적 조인을 통해 사용할 수 있어야합니다. – gnub

답변

5

주요 문제는 ContactsContract.CommonDataKinds.Phone.CONTENT_URI입니다. 필터는 has_phone_number=1입니다. 따라서 Phone.CONTENT_URI의 모든 내용이에 전화 번호가 있음을 보장 할 수 있습니다. 그런 다음 전화 번호 유형을 제한하려면 Phone.TYPEPhone.TYPE_MOBILE 또는 Phone.TYPE_WORK_MOBILE 중 하나 (예 :)인지 확인하여 추가로 필터링 할 수 있습니다.


참고 (has_phone_numberdata/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 

과 : 제가 잘못 본게 아니라면, 당신은`ContactsContract를 사용할 필요가

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 
+0

나를 도와주는 많은 정보를 제공해 주셨습니다. 감사. –