尝试构建正确的查询以从android数据库获取原始联系人。 查询:
String select = new StringBuilder( ContactsContract.RawContacts.CONTACT_ID + " = ? " + QUERY_AND_VALUE + stringBuilderTypeLocalContactSelection.toString() ).toString();
cursor = context.getContentResolver().query( ContactsContract.RawContacts.CONTENT_URI, columnSelection,select,new String[]{ String.valueOf( contactId ) }, null );
其中stringBuilderTypeLocalContactSelection为:
private static final StringBuilder stringBuilderTypeLocalContactSelection = new StringBuilder( ContactsContract.RawContacts.ACCOUNT_TYPE + " <> 'com.anddroid.contacts.sim'" +
QUERY_AND_VALUE + ContactsContract.RawContacts.ACCOUNT_TYPE + " <> 'com.google' " + " AND " + ContactsContract.RawContacts.ACCOUNT_TYPE
+ " <> 'com.android.contacts.sim' " + QUERY_AND_VALUE + ContactsContract.RawContacts.ACCOUNT_TYPE + " <> 'vnd.sec.contact.sim' "
+ QUERY_AND_VALUE + ContactsContract.RawContacts.ACCOUNT_TYPE + " <> 'com.viber.voip.account'" + QUERY_AND_VALUE + ContactsContract.RawContacts.DELETED + " = 0 " );
在此查询中尝试获取具有类型的原始联系人,这在字符串构建器中未描述,但如果ACCOUNT_TYPE值为null,则游标不从数据库中获取记录。当ACCOUNT_TYPE = null并且光标也给我记录时,是否可以进行有效选择?
答案 0 :(得分:1)
我遇到了同样的问题。我想获得不是“viber”和“whatsapp”的联系人,但是游标没有使用null ACCOUNT_TYPE记录。 我的决定是在选择中添加“OR”+ ContactsContract.RawContacts.ACCOUNT_TYPE +“IS NULL”,这解决了问题。