2011-10-18 51 views
1

我想將手機中的所有聯繫人放入數組中。我正在使用下面的代碼,但需要3-4秒才能將它們全部放入數組中。爲了加速這個過程,我只收集那些有電話號碼的聯繫人。這導致了163個元素的數組。Android ContactsContract.Contacts slow

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(); 
       } 
      } 
     }  

爲什麼這麼慢?

+0

根據我的經驗,ContactsContract似乎在模擬器上運行得非常慢。在設備上試用您的應用程序,看看它是否運行得更快。 –

+0

如果我沒有在手機上試過,我不會提出這個問題。 – erdomester

回答

1

您在查詢中有查詢。爲什麼不在你加入兩個語句的地方創建一個聯合查詢。這可能比當前的解決方案快得多。

+0

如何用兩個uris創建一個加入的查詢? AFAIK電話號碼存儲在他們自己的表格中,需要單獨查詢。 – erdomester

+0

看看這個問題:http://stackoverflow.com/questions/4957009/how-do-i-join-two-sqlite-tables-in-my-android-application – Drejc