【问题标题】:Android Contact Check if a contact has an email idAndroid Contact 检查联系人是否有电子邮件 ID
【发布时间】:2017-10-14 15:54:51
【问题描述】:

我有办法通过使用来检查联系人是否有电话号码
HAS_PHONE_NUMBER

ContentResolver ContntRslverVar = getContentResolver();
Cursor ContctCorsorVar = ContntRslverVar.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

while (ContctCorsorVar.moveToNext())
{

    if (Integer.parseInt(ContctCorsorVar.getString(ContctCorsorVar.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
    {

    }
}

类似是一种检查电子邮件的方法?喜欢
HAS_EMAIL

if (Integer.parseInt(ContctCorsorVar.getString(ContctCorsorVar.getColumnIndex(ContactsContract.Contacts.HAS_EMAIL))) > 0)
{

}

【问题讨论】:

  • 是的,我就是这样做的。但我觉得,如果我在电子邮件查询之前检查,使用类似 HAS_EMAIL 的东西,它会减少查询次数并且会更快。
  • 您可以比stackoverflow.com/questions/10117049/… 中接受的答案更快地完成,只需一个额外的查询而不是每个联系人一个查询,这就是您要找的吗?
  • 是的,需要它作为查询的列索引

标签: android email cursor contact contactscontract


【解决方案1】:

作为一种解决方法,您可以运行单个查询来获取所有具有电子邮件的联系人 ID,将这些 ID 存储在一个集合中,并将其用作“HAS_EMAIL”参考:

Set<Long> hasEmail = new HashSet<>();
// The Email class should be imported from CommonDataKinds.Email
Cursor cursor = getContentResolver().query(Email.CONTENT_URI, new String[] { Email.CONTACT_ID }, null, null, null); 
while (cursor != null && cursor.moveToNext()) {
    hasEmail.add(cursor.getLong(0));
}
if (cursor != null) {
    cursor.close();
}

// now you can check if a contact has an email via:
if (hasEmail.contains(someContactId)) {
    // do something
}

// or iterate over all contact-ids that has an email
Iterator<Long> it = hasEmail.iterator();
while(it.hasNext()) {
    Long contactId = it.next();
    // do something
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多