【问题标题】:Unable to fetch all contacts using lookup key无法使用查找键获取所有联系人
【发布时间】:2019-07-10 11:38:26
【问题描述】:

我无法使用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 获取所有详细信息?

【问题讨论】:

    标签: android android-contacts


    【解决方案1】:

    首先,您没有考虑电话类型的所有选项,除了移动/家庭/工作之外还有其他可能性。

    其次,您在该代码上有很多“继续”,每个都可能是罪魁祸首,我建议您稍微更改查询以通过在电话上查询来替换对CONTENT_ITEM_TYPE 的第一次检查,然后只需将光标转储到日志并手动检查您是否看到所有您希望看到的电话。 除此之外,查询看起来没问题。

    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();
    

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多