最快的方式来显示Android中的所有联系人,但有条件

时间:2016-09-06 11:17:39

标签: java android android-contacts

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

{
  "phone":123456989,
}

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

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

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

123456989
123456945
123456912
123456923

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

像这样:

123456989 --- using_this_app
123456945
123456912
123456923

像Viber或Whatsapp这样的东西,它们显示联系人的标记正在使用此应用程序。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

在您的情况下,我建议您做一些不同的事情,如果您在应用中添加了手机号码注册功能,这意味着<!DOCTYPE html> <head> <link rel="stylesheet" type="text/css" href="style.css"/> <title>Interreses - Website</title> <link rel="shortcut icon" type="image/x-icon" href="/images/Logo.ico" /> </head> <body> <div id="nav"> <ul> <li><a href="/index.html">Home</a></li> <li><a href="/interreses.html">Interreses</a></li> <li><a href="/Groepsleden.html">Groepsleden</a></li> <li><a href="/Opleiding.html">Opleiding</a></li> <li><a href="/fotogalerij.html">Fotogalerij</a></li> <li style="float: right;"><a style="width: 20px; height: 20px;" href="/index.html"><img src="/images/logo.png"></img></a></li> </ul> </div> <div id="container"> <div id="header"> <p style="text-align: center;"> Interesses </p> </div> <div id="content"> <div style="width: 60%; height: 70%; margin-left: 19%; margin-top: 12%;" class="textClass"> <p style="font-size: 1.2em; text-align: center;">Ik ben geinterreseerd in Gamen, Programmeren en Video Editing, ik zal ook uitleggen waarom.<br> <br> </p> <img src="/images/Gamen.jpg"/> <p style="font-size: 1.2em;">Gamen is leuk om te doen in mijn vrije tijd, ik hoop dan ook wel minimaal 60 uur per twee weken aan gamen besteed, bijvoorbeeld: <br> Gta V: 50 Uren <br> Cs:Go: 193 Uren <br> Age of empires 2: 71 Uren <br> Skyrim: 41 Uren <br> Garry's mod: 16 Uren<br> </p> <img src="/images/Programmeren.jpg"/> <p style="font-size: 1.2em;">Programmeren is ook een hobby van mij, ik programmeer meestal in Java maar nu ook in Javascipt, HTML5 en CSS3, dit kon ik overigens wel al, maar ik heb het lang niet meer <br> Java: 3 jaar <br> HTML: 1/2-1 jaar <br> CSS3: 1/2-1 jaar <br> Javascript: 1-4 maanden<br> </p> <img src="/images/Java.png"/> <p style="font-size: 1.2em;"><br> Java is mijn favoriete taal waar ik later ook een baan mee wil krijgen <br> ik programmeer al 3 jaar java, bijvoorbeeld: <br> Enumeratie, Abstracte classes <br> Interfaces en objecten <br> en nog veel meer, meestal programmeer ik plugins voor games bijvoorbeeld Maple Story, Rune Scape en Minecraft </p> <img style="margin-left: -27%; margin-top: 7%;" src="/images/VidEdit.jpg"/> <p style="font-size: 1.2em; margin-top: 7%;"><br> Video Editing deed ik erg vaak, nu niet meer maar het was wel een leuke tijdbesteding van mij <br> MLG compilatie filmpjes maken en ze daarna weer verwijderen <br> ik deed het video editing puur om het editen dus ik heb dus overige data want mijn PC is gereset<br> </p> </div> </div> </div> </body> <footer id="footer" style="margin-left: 0; color: white; width: 70%; margin-left: 15%;">Copyright by ******** (C) 2016-2019</footer> </html> 带号码在服务器端的数据库中。

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

首先阅读设备/电话的所有联系人和将所有号码发送到服务器并在那里放置条件,只返回注册号码列表作为响应,并且无需进行某种比较在应用方面的条件,因为它将花费太多时间。