gpt4 book ai didi

android - 插入新联系人时如何检测重复联系人?

转载 作者:行者123 更新时间:2023-11-30 03:42:19 25 4
gpt4 key购买 nike

对于联系人备份应用程序,我将所有信息保存到一个 CSV 文件中,然后我需要将其恢复。它工作得很好,但是如果我按两次恢复,它会复制所有联系人。

我尝试了以下代码来删除重复项,它确实有效,但在某些情况下会失败。基本上,当没有明确的 DISPLAY_NAME 时它会失败,例如如果联系人似乎只有电话号码,而 DISPLAY_NAME 是电话号码,或者电子邮件地址也是如此。我不明白为什么它不会总是有效,因为 DISPLAY_NAME 字段似乎包含电话号码/电子邮件地址。

这是我使用的代码:

private boolean contactExists(String displayname, String emailstring, String phonestring){
Cursor crsr = BA.applicationContext.getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
new String[] { "display_name", "_id"},
"display_name = ? ",
new String[] {displayname},
null);


while (crsr.moveToNext()){
HashMap m = new HashMap();
for (int col = 0; col < crsr.getColumnCount(); col++) {
m.put(crsr.getColumnName(col), Integer.valueOf(col));
}
int id = crsr.getInt(((Integer)m.get("_id")).intValue());
String emails = GetEmails(id);
String phones = GetPhones(id);

if (emails.contentEquals(emailstring) && phones.contentEquals(phonestring))
{
crsr.close();
return true;
}
}
crsr.close();
return false;
}

更新:我尝试使用 DISPLAY_NAME_PRIMARY,结果相同。

但是我注意到,如果我在同一设备/模拟器上创建联系人,当我重新恢复相同的联系人时,会检测到副本。在跨设备时,似乎它不起作用的一个原因是在某些时候特殊字符被删除了。例如显示名称“John.Doe”是从 CSV 中读取的,但是当它被插入时,它变成了“John Doe”。我看不到代码中“.”的位置。永远被剥离。

最佳答案

具体情况取决于设备运行的 Android 版本。如果版本是 Honeycomb (3.0) 或更高版本,联系人将总是有一个名字。姓名字段为 DISPLAY_NAME_PRIMARY,如果任何原始联系人中都没有姓名,则此字段设置为电话号码或电子邮件地址。

很难确切地知道您的代码发生了什么,因为我无法告诉您在所有情况下您是如何调用 contactExists 的。但我猜你正在查看 DISPLAY_NAME,而你可能想查看 DISPLAY_NAME_PRIMARY。

作为旁注,您在这里尝试做的事情充满了危险。联系人提供程序是一个复杂的系统,将其备份到 CSV 可能会导致很多问题。更好的策略是在联系人提供程序和基于云的 Google 联系人应用程序之间运行同步。

关于android - 插入新联系人时如何检测重复联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15536574/

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