【发布时间】:2016-12-17 23:07:05
【问题描述】:
我尝试对用户联系人进行实时搜索,我想获取每个匹配联系人的姓名、缩略图和地址(如果有的话)。
实时搜索在用户输入时运行。
所以他输入 ma 会得到 'martin'、'matthews'...
他会继续使用 mat,并且只会看到“matthews”
我尝试通过如下所示的单个查询来实现这一点,但我总是在FORMATTED_ADRESS 字段中获得联系号码。我想我有一个JOIN 的问题,因为我在同一个查询中使用了ContactsContract.CommonDataKinds 和ContactsContract.Contacts?
public static List<ContactModel> getContactsForQuery(Context context, String query) {
String[] projection = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
Contacts.PHOTO_THUMBNAIL_URI,
ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS
};
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String selection = ContactsContract.Contacts.DISPLAY_NAME + " LIKE '%" + query + "%'";
Cursor cursor = context.getContentResolver().query(uri, projection, selection, null,null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(0);
String thumbail = cursor.getString(1);
String formattedADress = cursor.getString(2);
}
while (cursor.moveToNext());
}
我实际上用
解决了我的问题- 查询
Contacts._ID、Contacts.DISPLAY_NAME -
使用
Contacts._ID开始第二个查询,如下所示Cursor detailCursor = context.getContentResolver().query( ContactsContract.Data.CONTENT_URI, new String[]{ CommonDataKinds.StructuredPostal.STREET, CommonDataKinds.StructuredPostal.CITY, CommonDataKinds.StructuredPostal.POSTCODE }, ContactsContract.Data.CONTACT_ID + "=? AND " + CommonDataKinds.StructuredPostal.MIMETYPE + "=?", new String[]{ String.valueOf(contactID), CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE }, null);
但这会为每个联系人启动第二次查询,这可能不是最好的方法。
所以我的最后一个问题是:是否有可能通过第一个查询来完成这项工作?
【问题讨论】:
-
为什么要投反对票?我错过了什么吗?
标签: android android-contacts contactscontract