【问题标题】:Android: Contact list not sort by nameAndroid:联系人列表不按名称排序
【发布时间】:2016-01-28 01:07:34
【问题描述】:

我正在尝试按字母排序顺序获取我的电话联系人。它快速获取名称但没有得到排序顺序。我尝试了 ContactsContract.Contacts.SORT_KEY_PRIMARY + "ASC"ContactsContract .Contacts.DISPLAY_NAME + "ASC" 但效果不佳。

我的代码是

 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null,ContactsContract.Contacts.DISPLAY_NAME + " ASC");
    while (phones.moveToNext())
    {
        String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
       Log.e("Tag ","Name " + name);

    }
    phones.close();

有没有按排序顺序获取联系人的解决方案

谁能帮帮我 在此先感谢:)

【问题讨论】:

    标签: android android-activity android-contacts


    【解决方案1】:

    试试这个..

     Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null,
           ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", 
           null, 
           "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
    

    【讨论】:

    • 这很好用,谢谢
    【解决方案2】:

    像这样使用它,它会起作用。它是最快和最好的方法。您必须使用它,因为可能有 b 种情况,包括字母、数字、特殊字符和 null。

    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null,ContactsContract.Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC");
    

    【讨论】:

      【解决方案3】:

      这是我的一个应用程序的摘录:

      Uri uri = ContactsContract.Data.CONTENT_URI;
          String selection = String.format("%s = '%s'", ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
          // Make this order case insensitive.
          String orderBy = "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + ") ASC";
      
          contactCursor = context.getContentResolver().query(uri, null, selection, null, orderBy);
      

      所以基本上,尝试DISPLAY_NAME_PRIMARY 而不仅仅是DISPLAY_NAME。还要注意 orderBy 子句的大小写敏感性。

      【讨论】:

      • 谢谢你,现在正在排序,但联系人姓名重复了两次
      【解决方案4】:

      我使用下面的代码让所有联系人按字母顺序排序

      public void getAllContacts(ContentResolver cr) {
      
          Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null,   ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC"); //cursor fetches data alphabetically
          while (phones.moveToNext()) {
              ContactDetail cntactDetails = new ContactDetail();
              cntactDetails.setName(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
              cntactDetails.setNumber(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
      
              String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
              cntactDetails.setId(id);
              phones.close();
      }
      

      注意 - 这里ContactDetail 是一个用于存储联系人的模型类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多