我正在嘗試進行篩選聯繫人的查詢,以僅檢索具有特定帳戶類型的聯繫人。基於raw_contact查詢android聯繫人ACCOUNT_TYPE
private void testQuery() {
String selection = ContactsContract.Contacts._ID + " IN (" + "SELECT " +
ContactsContract.RawContacts.CONTACT_ID + " FROM " +
"raw_contacts" + " WHERE " +
ContactsContract.RawContacts.ACCOUNT_TYPE + " IS NULL OR " +
ContactsContract.RawContacts.ACCOUNT_TYPE + " = 'com.google'" + ")";
Cursor c = null;
try {
c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
null,
selection,
null, null);
} catch(Exception e) {
e.printStackTrace();
}
if(c != null) {
int indexName = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
while(c.moveToNext()) {
String name = c.getString(indexName);
// TODO:
}
c.close();
}
}
的問題是,它適用於Android 2.2,但它:
我使用下面的代碼是在Android 2.2的作品,但在新的機器人不工作(如Android 4.4.2)這樣做在新的android(android 4.4.2)上拋出一個異常。異常是:SQLiteException:沒有這樣的列:account_type。
我不知道爲什麼這不適用於新的機器人,但我認爲這是一個安全功能。
問題:我嘗試解決此問題是否有任何解決方法?
當前的解決方案:我目前的解決方案是,我做了2個查詢,一個在raw_contact表中,另一個在聯繫人表中。這種方法的問題在於它非常緩慢且笨拙,我不能使用好的CursorLoader,它在數據更改時負責重新加載,導致維護代碼非常非常難看並且很難。
所有幫助表示讚賞。
更新:請參閱下面的新解決方案。