Невозможно получить все контакты, используя ключ поиска - PullRequest
1 голос
/ 10 июля 2019

Я не могу получить все контактные номера, сохраненные под человеком, используя LookUpKey.Я сохранил три контактных номера под одним человеком (домашний, мобильный и рабочий).Но когда я запрашиваю контакты, используя lookUpKey контакта, он не извлекает все сохраненные контакты.

Это мой код

ArrayList<ContactItem> contactItems = new ArrayList<>(5);
String lookUpKey = params[1];

Uri dataUri = ContactsContract.Data.CONTENT_URI;
Cursor dataCursor = mApplication.getContentResolver().query(dataUri,
        null,
        ContactsContract.Data.LOOKUP_KEY + " = ?",
        new String[]{lookUpKey}, null);
if (dataCursor == null || !dataCursor.moveToFirst()) return contactItems;
M.logE("cursor length = " + dataCursor.getCount());
M.logE("column count = " + dataCursor.getColumnCount());

ArrayList<String> tempContacts = new ArrayList<>();

String homePhone;
String mobilePhone;
String workPhone;
while (dataCursor.moveToNext()) {
    final String data2 = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
    final int contactType = dataCursor.getInt(dataCursor.getColumnIndex(ContactsContract.Data.DATA2));
    M.logE("Contact type = " + contactType);

    if (!data2.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {
        continue;
    }

    if (contactType == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) {
        mobilePhone = dataCursor.getString(dataCursor.getColumnIndex(DATA_1));
        if (TextUtils.isEmpty(mobilePhone)) continue;
        mobilePhone = mobilePhone.replace("-", "");
        mobilePhone = mobilePhone.replace(" ", "");
        if (!tempContacts.contains(mobilePhone)) {
            tempContacts.add(mobilePhone);
            contactItems.add(new ContactItem(mobilePhone, "Mobile"));
        }

    } else if (contactType == ContactsContract.CommonDataKinds.Phone.TYPE_HOME) {
        homePhone = dataCursor.getString(dataCursor
    .getColumnIndex(DATA_1));
        if (TextUtils.isEmpty(homePhone)) continue;
        homePhone = homePhone.replace("-", "");
        homePhone = homePhone.replace(" ", "");
        if (!tempContacts.contains(homePhone)) {
            tempContacts.add(homePhone);
            contactItems.add(new ContactItem(homePhone, "Home"));
        }

    } else if (contactType == ContactsContract.CommonDataKinds.Phone.TYPE_WORK) {
        workPhone = dataCursor.getString(dataCursor
    .getColumnIndex(DATA_1));
        if (TextUtils.isEmpty(workPhone)) continue;
        workPhone = workPhone.replace("-", "");
        workPhone = workPhone.replace(" ", "");
        if (!tempContacts.contains(workPhone)) {
            tempContacts.add(workPhone);
            contactItems.add(new ContactItem(workPhone, "Work"));
        }
    }
}

Что в этом плохого?Как я могу получить все детали, используя lookUpKey?

1 Ответ

0 голосов
/ 11 июля 2019

Во-первых, вы не учитываете все параметры для типа телефона, есть и другие возможности, кроме мобильного / домашнего / рабочего.

Во-вторых, у вас есть много «continue» в этом коде, каждый может быть виновником, я предлагаю вам немного изменить запрос, чтобы заменить первую проверку для CONTENT_ITEM_TYPE запросом на Phone., А затем просто поместите курсор в журнал и вручную проверьте, видите ли вы все телефоны, которые ожидаете увидеть. Кроме того, запрос выглядит нормально.

String[] projection = new String[] { Phone.NUMBER, Phone.TYPE };
String selection = Phone.LOOKUP_KEY + " = ?";
String[] selectionArgs = new String[] {lookUpKey};

Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, projection, selection, selectionArgs, null);
DatbaseUtils.dumpCursor(cursor);
cursor.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...