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:联系人列表不按名称排序的主要内容,如果未能解决你的问题,请参考以下文章
我的 android 应用程序中出现了联系人列表。单击名称后,如何将数字保存到字符串中?