2011-02-03 87 views
0

我想從android.i中的設備獲取所有手機聯繫人已使用以下code.but問題是需要更多時間來返回results.is有任何解決方案嗎?android中的聯繫人

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

你的意思是執行這段代碼需要很長時間嗎? – Dalmas 2011-02-03 18:01:50

回答

2

閱讀代碼後,我認爲你想要的是一個列表顯示名稱和他們各自的電話號碼的聯繫人。

如果你正在尋找與電話號碼相關的數據,我建議你在 上查詢android.provider.ContactsContract.PhoneLookup並使用單個遊標獲取結果。 以下是你會感興趣的領域: DISPLAY_NAME HAS_PHONE_NUMBER NUMBER TYPE

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,... 

進一步詳情,請參閱this

請發表您的要求,如果假設不對。

  • 一些快速檢查:

    1. 僅選擇所需的列,而不是所有在第一個查詢。
    2. 而不是使用的Integer.parseInt(cur.getString)使用 cur.getInt()的
    3. 使用PhoneLookup每當有電話號碼(數量 域給出的原始的電話號碼,而不是 存儲在 的值的處理數據庫可以包含
      - ,),(附加它)
    4. 避免在遊標中使用遊標。使用包含 的API已經在其中實施,如 RawContactsEntity,PhoneLookup。

希望有幫助。

0

不要在UI線程上執行復雜的數據庫查詢。你想對結果做什麼?如果您要在列表中顯示內容,請使用CursorAdapter,這樣您只需在需要時拔出所需內容即可。