2015-06-23 32 views
0

我有一個程序可以讀取聯繫人,然後將其顯示到ListView。但問題是我的手機中有25k +的聯繫人,而且有60%的聯繫人是谷歌的。因此,閱讀聯繫人需要太多時間。我如何閱讀有電話號碼的聯繫人?只讀真實聯繫人

我使用這個代碼:

Cursor phones = as.getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
while (phones.moveToNext()) 
{ 
    String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
    String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 


} 
phones.close(); 
+0

問題是你使用的是什麼適配器? – pskink

+0

以及爲什麼使用'while'循環?你使用什麼適配器? – pskink

+0

我想用什麼? – Emma

回答

0

where子句可以用來過濾用的電話號碼的聯繫人。使用下面的代碼來檢索聯繫人。

CursorLoader cursorLoader = new CursorLoader(getActivity(), ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME}, 
      ContactsContract.Contacts.HAS_PHONE_NUMBER + " > 0 ", null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC;"); 

對於閱讀聯繫人,您需要以下權限。

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
+0

謝謝!但我使用這個:如何編輯此代碼? : 'ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);' – Emma

0

您可以使用HAS_PHONE_NUMBER。 ContactsContract.Contacts.HAS_PHONE_NUMBER 。 實例

String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

    if (hasPhone.equals(ContactsContract.Contacts.HAS_PHONE_NUMBER)) 
     //do your thing