gpt4 book ai didi

java - Android 检索手机联系人查询需要很长时间

转载 作者:行者123 更新时间:2023-12-01 18:20:05 25 4
gpt4 key购买 nike

您好,我正在使用下一个代码来检索电话联系人姓名、号码,并且需要很长时间。经过小搜索后,我发现cursor.moveToFirst()命令就是那个因为这个的人。但我找不到任何解决方案):有人可以帮助我吗?谢谢!

public void loadPhoneMembers(){

ContentResolver cr = this.getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

if(cursor.moveToFirst())
{
do
{
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{ id }, null);
while (pCur.moveToNext())
{
String contactNumber=pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String contactName =
pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

if(!phonesAdded.contains(contactNumber)){
members.add(contactName+","+contactNumber); // members is arrayList
}

break;
}
pCur.close();
}

} while (cursor.moveToNext()) ;
}

}

最佳答案

您正在为第一个查询中的每个联系人查询一个额外的光标。您可以在一次查询中查询姓名和电话号码,并忽略没有电话号码的联系人。

String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER ,ContactsContract.CommonDataKinds.Phone.PHOTO_URI};
Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projection, null, null, null);

此外,while (cursor.moveToNext()){
}

与下面的效果相同。

if(cursor.moveToFirst())
{
do
{

} while (cursor.moveToNext()) ;

关于java - Android 检索手机联系人查询需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27850621/

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