【问题标题】:Fastest way to display all contacts in android but conditionally在android中显示所有联系人的最快方法,但有条件
【发布时间】:2016-09-06 19:49:54
【问题描述】:

也许标题误导了我真正追求的东西。我有一个网络服务,它给了我一些 Json 格式的电话号码。 像这样:

{
  "phone":123456989,
}

此 Web 服务可以返回 500 多个结果。解析它没有问题,并显示在列表视图中。

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

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

123456989
123456945
123456912
123456923

我想显示所有联系人,比较我从网络服务获得的结果

像这样:

123456989 --- using_this_app
123456945
123456912
123456923

类似于 Viber 或 Whatsapp,它们会显示联系人正在使用此应用程序的标记。

如果我想将 Web 服务的每个结果与每个联系人进行比较,我可以完成我想要的,但问题是这需要很多时间。我怎样才能更快地做到这一点?所以比较不会像 viber 或 whatsapp 那样花费太长时间

【问题讨论】:

  • 什么是“很多时间”?比较一个字符串 500 次并不需要很长时间
  • 可以说,Web 服务返回 500 个结果,而我的电话簿有 1000 个联系人。所以在这种情况下,每个 500 结果将与 1000 结果进行比较。我很困惑它效率不高。我想像 viber 或什么应用程序那样做。

标签: java android android-contacts


【解决方案1】:

一个简单的选择是:将两个“数据集”放入 Set 对象中。然后您可以使用retainAll 轻松缩小这两个列表的交集

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

Set<String> setA = ...
Set<String> setB = ...
setA.retainAll(setB); // setA now contains only elements in both sets

使用 removeAll,您可以轻松获取仅在两个列表之一中的所有条目(例如,突出显示电话簿中未使用您的应用的那些号码)。

[ 免责声明:从 JSON 输入中提取此类集合的工作;并从手机的联系人列表中留给读者作为练习。对于一个期望有这么多用户使用他的应用程序的人来说;他的应用程序有机会通过联系人找到其他应用程序用户,剩下的工作应该只是“花生”。 ]

【讨论】:

  • 感谢您的回答,在考虑其他方法后,我认为这是最好的。
【解决方案2】:

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

    List<String> serverPhoneNumbers = new ArrayList<String>;
    if(serverPhoneNumbers.contains(mobilePhoneNumber)){
        //matched on server...
    }else{
        //not matched on server...
    }

【讨论】:

  • 简单,是的。快速,不一定
  • 我的答案是使用集合而不是列表是有原因的。 contains 在列表上与在集合上调用它并不完全相同。
  • 你能说出你为什么使用集合而不是列表的原因吗?
  • 提示:我已经告诉过你了。 contains 对列表有不同的作用。说真的:如果你想给出答案;然后明白你在说什么。喜欢:stackoverflow.com/questions/10196343/…
【解决方案3】:

好吧,在你的情况下,我建议你做一些不同的事情,如果你在你的应用中添加了手机号码注册功能,这意味着you have already registered user list 在你的号码中服务器端的数据库。

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

首先读取设备/电话的所有联系人并将所有号码发送到服务器并将条件放在那里,仅返回注册号码列表作为响应,并且不需要进行某种比较应用程序端的条件,因为这将花费太多时间。

【讨论】:

  • 当然,作为某个应用程序的用户,我真的很喜欢应用程序将我的所有联系人推送到某个服务器的想法。或者也许,不是。
  • 想想write now you have only 500 Numbers to compare,但将来可能会增加吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2015-05-23
  • 2013-03-01
相关资源
最近更新 更多