Java 仅阅读真实联系人

Java 仅阅读真实联系人,java,android,android-contacts,contactscontract,Java,Android,Android Contacts,Contactscontract,我有一个程序,可以读取联系人,然后将其显示在列表视图中。但问题是,我的手机上总共有25k+个联系人,60%的联系人是谷歌的。因此,阅读联系人需要花费太多的时间。如何读取有电话号码的联系人 我正在使用以下代码: Cursor phones = as.getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);

我有一个程序,可以读取联系人,然后将其显示在
列表视图中。但问题是,我的手机上总共有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();

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" />

您可以使用HAS\u电话号码。 . 一个例子

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

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

问题是您使用的适配器是什么?为什么要使用
while
循环?你用的是什么适配器?我想用什么?举个例子就可以了。:)contacts contract.CommonDataTypes.Phone.CONTENT\u URI将提供仅包含电话号码的联系人…您是否收到没有电话号码的联系人?谢谢!但我使用的是:如何编辑此代码<代码>ContentResolver cr=getContentResolver();Cursor cur=cr.query(ContactsContract.commondatatypes.Phone.CONTENT_URI,null,null,null)