Java 在android中显示所有联系人的最快方式,但有条件

Java 在android中显示所有联系人的最快方式,但有条件,java,android,android-contacts,Java,Android,Android Contacts,也许标题误导了我真正想要的东西。我有一个web服务,它以Json格式为我提供一些电话号码。 像这样: { "phone":123456989, } 此web服务可以返回500多个结果。解析它并在列表视图中显示它是没有问题的 我想在手机中显示所有联系人(带有电话号码),我也可以这样做 假设我的联系人列表中有四个电话号码(实际是500) 123456989 123456945 123456912 123456923 我想显示所有联系人,比较从web服务获得的结果 像这样: 123456989

也许标题误导了我真正想要的东西。我有一个web服务,它以Json格式为我提供一些电话号码。 像这样:

{
  "phone":123456989,
}
此web服务可以返回500多个结果。解析它并在列表视图中显示它是没有问题的

我想在手机中显示所有联系人(带有电话号码),我也可以这样做

假设我的联系人列表中有四个电话号码(实际是500)

123456989
123456945
123456912
123456923
我想显示所有联系人,比较从web服务获得的结果

像这样:

123456989 --- using_this_app
123456945
123456912
123456923
类似Viber或Whatsapp的东西,它们显示联系人的标记正在使用该应用程序


如果我想将来自web服务的每个结果与每个联系人进行比较,我可以实现我想要的,但问题是这将需要很多时间。我怎样才能做得更快?因此,比较不会像viber或whatsapp那样花费太长时间,一个简单的选择是:将两个“数据集”放入集合对象中。然后,您可以使用来轻松缩小这两个列表的交集:

使用retainAll,您可以轻松获取两个列表中的所有条目:

Set<String> setA = ...
Set<String> setB = ...
setA.retainAll(setB); // setA now contains only elements in both sets
Set setA=。。。
设置setB=。。。
刚毛保留(后退);//setA现在只包含两个集合中的元素
使用removeAll,您可以轻松获取仅在两个列表之一中的所有条目(例如,突出显示电话簿中未使用您的应用程序的号码)

[
免责声明:从JSON输入和手机联系人列表中提取这样一组数据的工作留给读者作为练习。对于一个人来说,他希望他的应用程序有这么多用户;他的应用程序有机会通过联系人找到其他应用程序用户,剩下的工作应该是“微不足道的”。]

另一种快速简单的方法是将所有服务器电话号码添加到字符串列表中。然后使用“.contains”检查所有手机号码,因为您总是在列表中显示所有手机号码,就像在显示手机号码的适配器中一样:

    List<String> serverPhoneNumbers = new ArrayList<String>;
    if(serverPhoneNumbers.contains(mobilePhoneNumber)){
        //matched on server...
    }else{
        //not matched on server...
    }
List serverPhoneNumbers=newarraylist;
if(ServerPhoneNumber.contains(mobilePhoneNumber)){
//在服务器上匹配。。。
}否则{
//服务器上不匹配。。。
}

在您的情况下,我建议您做一些不同的事情,如果您在应用程序中添加了手机号码注册功能,这意味着
您已经在服务器端的数据库中使用号码注册了用户列表

现在,做与你所做完全相反的事情


首先读取设备/手机的所有联系人,将所有号码发送到服务器,并在服务器上设置条件,该条件仅返回注册号码列表作为响应,无需在应用程序端设置某种比较条件,因为这将花费太多时间。

什么是“很多时间”?比较字符串500次不需要longLets说,web服务返回500个结果,而我的电话簿有1000个联系人。因此,在这种情况下,500个结果中的每一个都将与1000个结果进行比较。我感到困惑,这是没有效率的。我想像viber或什么应用程序那样做。简单,是的。快速,不是必需的这就是为什么我的答案是使用集合而不是列表的原因。列表中的contains与在集合中调用它并不完全相同。你能告诉我为什么使用集合而不是列表吗?提示:我已经告诉过你了。“包含”对列表的作用不同。认真地说:如果你想给出答案;然后理解你正在谈论的事情。比如:当然,作为某个应用程序的用户,我非常喜欢该应用程序将我的所有联系人推送到某个服务器上的想法。或者可能不是。想想看,现在你只有500个数字可以比较,但将来可能会增加。谢谢你的回答,在考虑其他方法后,我认为这是最好的。