以下查詢在我的設備(API 15)上正常運行。它不會在我的模擬器上工作運行API 8或API 10Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER no such列
下面是該查詢:
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");
這裏是它拋出異常: 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
奇怪的是,下面的代碼也不起作用:
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
訪問HAS_PHONE_NUMBER
從接口android.provider.ContactsContract.ContactsColumns
爲了增加陌生感,這個查詢的工作:
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_KEY
來自與ContactsContract.Data.HAS_PHONE_NUMBER
相同的隱式連接!
我哪裏錯了?
如果我沒有記錯的話,你需要使用'ContactsContract。 Contacts.CONTENT_URI'而不是'ContactsContract.Data.CONTENT_URI'。這將生成額外列的implict連接。 – Codo 2012-08-05 14:26:36
更改爲'ContactsContract.Contacts.CONTENT_URI'給了我'java.lang.IllegalArgumentException:無效的列contact_id' – gnub 2012-08-05 19:54:18
http://developer.android.com/reference/android/provider/ContactsContract.Data.html使它看起來像' HAS_PHONE_NUMBER'應該可以通過與'ContactsContract.Contacts'的隱式連接來使用。 – gnub 2012-08-05 19:59:50