2011-08-23 31 views
6

有沒有讓所有的所有聯繫人的電話號碼而不做一個單獨的查詢爲每個聯繫人的一種方式? (使用Android 2.0+)。如果你有超過100個聯繫人(在低端手機上無法使用),它真的很慢,我想知道我是否可以做一個更有效的查詢。有效的方式來加載所有聯繫人和所有的電話號碼(安卓2.0)

目前我得到一個遊標所有有效ContactsContract.Contacts.IN_VISIBLE_GROUP接觸,然後一個單獨的查詢爲每個聯繫人獲得他們所有的數字。

片段從一開始只是聯繫人歌廳的名字和查找鍵:

Uri uri = ContactsContract.Contacts.CONTENT_URI; 

String[] projection = new String[] { 
    ContactsContract.Contacts.DISPLAY_NAME, 
    ContactsContract.Contacts.LOOKUP_KEY}; 

然後每個聯繫人使用查找鍵。

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey); 
Uri res = ContactsContract.Contacts.lookupContact(contentResolver, lookupUri); 

String[] projection = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER}; 

...

Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, phoneProjection, selection, selectionArgs, sortOrder); 
+0

android系統中的所有聯繫人鏈接到這個問題? – scottyab

+0

你必須提交表格兩次。好點。投票結束。 – scottyab

回答

15

檢查下面的代碼,可以幫助

public ArrayList<PhoneContactInfo> getAllPhoneContacts() { 
    Log.d("START","Getting all Contacts"); 
    ArrayList<PhoneContactInfo> arrContacts = new ArrayList<PhoneContactInfo>(); 
    PhoneContactInfo phoneContactInfo=null;  
    Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
    Cursor cursor = context.getContentResolver().query(uri, new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone._ID}, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); 
    cursor.moveToFirst(); 
    while (cursor.isAfterLast() == false) 
    { 
     String contactNumber= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     int phoneContactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)); 


     phoneContactInfo = new PhoneContactInfo(); 
     phoneContactInfo.setPhoneContactID(phoneContactID);    
     phoneContactInfo.setContactName(contactName);     
     phoneContactInfo.setContactNumber(contactNumber); 
     if (phoneContactInfo != null) 
     { 
      arrContacts.add(phoneContactInfo); 
     } 
     phoneContactInfo = null; 
     cursor.moveToNext(); 
    }  
    cursor.close(); 
    cursor = null; 
    Log.d("END","Got all Contacts"); 
    return arrContacts; 
} 
+1

不錯的一個,減少加載時間從8.7s到2.4s :) – scottyab

+0

將新鮮聯繫人插入本機後,我如何獲得本機聯繫人ID – AndroidRaji

0

你爲什麼D使用?

Contract.Contacts.IN_VISIBLE_GROUP

被分配到Contract.Contacts.IN_VISIBLE_GROUP

相關問題