【发布时间】:2018-04-02 12:57:09
【问题描述】:
我想显示一个列表,其中包含存储在设备和 SIM 中的联系人姓名(GIVEN_NAME、FAMILY_NAME)(我想排除帐户联系人)。
我现在要做的是:
1) 我在accountTypesArray 中获得所有帐户
2) 我查询 RawContacts 不包括帐户
String where = ContactsContract.RawContacts.ACCOUNT_TYPE + " NOT IN (" + makePlaceholders(accountTypesArray.length) + ") ";
String whereArgs[] = accountTypesArray;
return new CursorLoader(getActivity(),
ContactsContract.RawContacts.CONTENT_URI,
new String[]{ContactsContract.RawContacts._ID},
where,
whereArgs, null);
3) 我使用 mimeType 结构化名称查询 DATA
String where = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE +
"' AND " + ContactsContract.Data.RAW_CONTACT_ID + " IN (" + makePlaceholders(contactIDsArray.length) + ") ";
return new CursorLoader(getActivity(),
ContactsContract.Data.CONTENT_URI,
projection,
where,
contactIDsArray,
SORT_ORDER);
问题是当contactIDsArray 的大小大于999 并且SQLite 抛出太多SQL 变量异常。
有没有更有效的方法?
提前谢谢你
【问题讨论】:
标签: android android-contentprovider android-contacts android-contentresolver contactscontract