我想从android.i中的设备获取所有手机联系人已使用以下代码。但问题是返回结果需要更多时间。是否有任何解决方案?
ContentResolver cr = getContentResolver();
int index=0;
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cur.getCount() > 0)
{
phoneNames=new String[cur.getCount()];
phoneNumbers=new String[cur.getCount()];
while (cur.moveToNext())
{
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
name = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
phoneNames[index]=name;
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext())
{
phoneIndex++;
phoneNumbers[index] = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
index++;
}
pCur.close();
}
}
答案 0 :(得分:2)
阅读完代码后,我假设你想要的是一个带有DISPLAY NAMES的联系人列表及其各自的电话号码。
如果您专门寻找与电话号码相关的数据,我建议您查询 android.provider.ContactsContract.PhoneLookup并使用单个游标获取结果。 以下是您感兴趣的字段: 显示名称 HAS_PHONE_NUMBER 数 TYPE
例如
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
更多详情请参阅this
如果假设不正确,请发布您的要求。
一些快速检查:
希望有所帮助。
答案 1 :(得分:0)
不要在UI线程上执行复杂的数据库查询。你想对结果做什么?如果您要在列表中显示内容,请使用CursorAdapter,这样您只需在需要时提取所需内容。