Android:联系人列表不按名称排序

Posted

技术标签:

【中文标题】Android:联系人列表不按名称排序【英文标题】:Android: Contact list not sort by name 【发布时间】: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();

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

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

【问题讨论】:

【参考方案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 是一个用于存储联系人的模型类。

【讨论】:

以上是关于Android:联系人列表不按名称排序的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap:联系人列表排序

我的 android 应用程序中出现了联系人列表。单击名称后,如何将数字保存到字符串中?

为啥 lint 在 Android Studio 中获取联系人列表名称和号码时显示“值 >= 1”?

在 Android 中高效处理动态列表视图项

MySQL不在子查询不按预期工作

Android:在 Contact Uri 列表中显示所有有电话号码的联系人详细信息