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

时间:2015-10-28 10:02:08

标签: android android-activity android-contacts

我正在尝试按字母排序顺序获取手机通讯录。它通过快速获取名称但未获得排序顺序。我尝试 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();

是否有任何按排序顺序获取联系人的解决方案

任何人都可以帮助我 在此先感谢:)

4 个答案:

答案 0 :(得分:0)

这是我的应用之一的摘录:

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子句的区分大小写。

答案 1 :(得分:0)

试试这个..

{{1}}

答案 2 :(得分:0)

像这样使用它会起作用。它是快速和最好的方式。你必须使用它,因为可能有字母,数字,特殊字符和null的情况。

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

答案 3 :(得分:0)

我使用以下代码将所有联系人按字母顺序排序

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是用于存储联系人的模型类。