Как искать контакты в андроиде с частичным номером телефона - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь сделать нечеткий поиск контактов в моем приложении для Android по частичному номеру телефона, с кодом ниже. Но моя функция поиска всегда заканчивается безрезультатно.

Например,

У меня есть контакт с номером телефона 1234567890 с именем в качестве «примера».

fuzzySearch("4567"); должен быть возвращен с контактом с именем "пример".

Может кто-нибудь указать мне, где я не прав? Я проверил здесь . Но закончилась ошибкой SQL-запроса во время выполнения.

public ArrayList<Contact> fuzzySearch(String match) {
    private static final String SELECTION = Phone.NUMBER + " LIKE ? COLLATE NOCASE";

    Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(match));

    String[] projectionFields = new String[]{ContactsContract.Contacts._ID, Phone.NUMBER};

    CursorLoader cursorLoader = null;

    ArrayList<Contact> listContacts = new ArrayList<>();

    if(match.trim().length() == 0){
       return listContacts;
    }else {
        cursorLoader = new CursorLoader(context, uri, projectionFields, SELECTION, new String[]{"%"+match+"%"}, Phone.NUMBER);
    }

    Cursor c = cursorLoader.loadInBackground();

    final Map<String, Contact> contactsMap = new HashMap<>(c.getCount());

    if (c.moveToFirst()) {
        int idIndex = c.getColumnIndex(ContactsContract.Contacts._ID);
        int nameIndex = c.getColumnIndex(Phone.NUMBER);

        do {
            String contactId = c.getString(idIndex);
            String contactDisplayName = c.getString(nameIndex);
            Contact contact = new Contact(contactId, contactDisplayName);
            contactsMap.put(contactId, contact);
            listContacts.add(contact);
        } while (c.moveToNext());
    }

    c.close();
    return listContacts;
}

1 Ответ

0 голосов
/ 07 сентября 2018

использовать PhoneLookup вместо телефона. поскольку вы уже закодировали ключ поиска в URL-адресе, ВЫБРАТЬ его не нужно, удалите его.

   Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(match));
   Cursor cur = resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,PhoneLookup.NUMBER, PhoneLookup.CONTACT_ID}, null, null, null);
...