Android ContactsContract.Contacts缓慢

时间:2011-10-18 19:12:26

标签: android contactscontract

我想把手机中的所有联系人都放到一个数组中。我正在使用下面的代码,但将所有这些代码放入数组需要3-4秒。为了加快这个过程,我只收集那些有电话号码的联系人。这导致163个元素的数组。

final String[] projection1 = new String[] {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts.HAS_PHONE_NUMBER};
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection1, null, null, null);
        if (cur.getCount() > 0) 
        {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                if (Integer.parseInt(cur.getString(cur.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()) {
                    number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    contactnumbers.add(number);

                } 
                pCur.close();
                }
            }
        }      

为什么这么慢?

1 个答案:

答案 0 :(得分:1)

您在查询中有查询。为什么不在两个语句中创建连接查询。这可能比目前的解决方案快得多。