gpt4 book ai didi

android - 如何通过一次查询搜索地址为 (FORMATTED_ADDRESS) 的联系人?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:59 24 4
gpt4 key购买 nike

我尝试对用户联系人实现实时搜索,我想获取每个匹配联系人的姓名、缩略图和地址(如果有的话)。

实时搜索在用户输入时运行。

所以他输入 ma​​ 会得到 'martin', 'matthews'...

他将继续 ma​​t 并且只会看到“matthews”

我尝试通过如下所示的单个查询来实现此目的,但我总是在 FORMATTED_ADRESS 字段中获取联系电话。我想我遇到了 JOIN 问题,因为我在同一个查询中使用了 ContactsContract.CommonDataKindsContactsContract.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());
}

我实际上用

解决了我的问题
  1. 正在查询 Contacts._IDContacts.DISPLAY_NAME
  2. 使用 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);

但这将启动对每个联系人的第二次查询,这可能不是最好的方法。

所以我的最后一个问题是:是否可以通过第一个查询来完成这项工作?

最佳答案

嗯,很遗憾,没有人能够回答我的问题并获得赏金积分;-(

作为记录,这是我的工作示例。它解决了这个问题,但我仍然认为它会产生很大的过载。在每个用户条目 (afterTextchange) 上,我调用 getContactsDetailsQuery,它首先获取所有用户,他们的 ID 在他们的名字中包含查询 (cursor) 并且之后,我为每个用户启动另一个查询 (detailCursor) 以获取地址。为了防止过载,我添加了一个限制..

public static List<SearchModel> getContactDetailsForQuery(Context context, String query, int limit) {

final int CONTACT_ID_INDEX = 0;
final int CONTACT_NAME_INDEX = 1;
final int CONTACT_THUMBNAIL_INDEX = 2;

//my custom model to hold my results
List<SearchModel> results = new ArrayList<SearchModel>();

final String[] selectUser = new String[]{
Contacts._ID,
Contacts.DISPLAY_NAME,
Contacts.PHOTO_THUMBNAIL_URI};
String selection = Contacts.DISPLAY_NAME + " LIKE ?";
String[] selectionArgs = new String[]{"%" + query + "%"};
String sortOrder = Contacts.DISPLAY_NAME + " ASC";

Cursor cursor = context.getContentResolver().query(Contacts.CONTENT_URI, selectUser, selection, selectionArgs, sortOrder, null);

int contactCounter = 0;
if (cursor != null && cursor.moveToFirst()) {

do {
String contactID = cursor.getString(CONTACT_ID_INDEX);
String displayName = cursor.getString(CONTACT_NAME_INDEX);
String thumbnail = cursor.getString(CONTACT_THUMBNAIL_INDEX);

//get user details with user id (this is the query i wanted to change in my question!!)
Cursor detailCursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[]{
CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS},
ContactsContract.Data.CONTACT_ID + "=? AND " +
CommonDataKinds.StructuredPostal.MIMETYPE + "=?",
new String[]{String.valueOf(contactID), CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE},
null);

if (detailCursor != null && detailCursor.moveToFirst()) {
//special case: user has several address, query all of them
do {
String formattedAddress = detailCursor.getString(detailCursor.getColumnIndex(CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
//user has serveral adress -> init model for each adress
SearchModel contact = new SearchModel();
results.add(contact);
contactCounter++;

} while (detailCursor.moveToNext() && contactCounter < limit);

} else {

//user has no adress -> init model
SearchModel contact = new SearchModel();
results.add(contact);
contactCounter++;
}

detailCursor.close();

} while (cursor.moveToNext() && contactCounter < limit);
}
cursor.close();

return results;
}

关于android - 如何通过一次查询搜索地址为 (FORMATTED_ADDRESS) 的联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com