是否有更快的方法来筛选和排序Android联系人列表?

时间:2015-11-04 17:03:28

标签: android database filtering android-contacts android-cursor

所以我正在开展一个项目,我需要获取用户的联系人列表(特别是姓名,电子邮件地址和联系人详细信息的位置),将其放入列表中,然后使用该列表在自动完成视图中,以便他们可以开始键入名称,并将其过滤掉。

我的代码工作正常,它都编译并且所有运行都没有错误。问题是它非常慢。对于有10个联系人的人来说,这可能不会花费很长时间,但我的手机里面有1700个联系人,所以整个过程需要2分钟才能完成......这太可怕了!

以下是当前的工作代码(我删除了添加位置的代码,因为它很冗长):

   public static List<MyObject> getContactList(){
        List<MyObject> contactList = new ArrayList<>();

        Cursor people = MyApplication.getAppContext().getContentResolver().
                query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        while (people.moveToNext()) {
            String email = "";
            String location = "";
            String phone = "";

            String contactName = people.getString(people.getColumnIndex(
                    ContactsContract.Contacts.DISPLAY_NAME));

            String contactId = people.getString(people.getColumnIndex(
                    ContactsContract.Contacts._ID));

            if(contactId != null){
                Cursor contactsEmails = getSpecificEmailsCursor(contactId);

                while (contactsEmails.moveToNext()){
                    //For now, just setting it to the last email
                    email = contactsEmails.getString(contactsEmails.getColumnIndex(
                            ContactsContract.CommonDataKinds.Email.DATA));

                    phone = contactsEmails.getString(contactsEmails.getColumnIndex(
                            ContactsContract.CommonDataKinds.Phone.NUMBER));


                }
                contactsEmails.close();

                MyObject person = new MyObject();
                try{

                    person.setEmail(email);
                    person.setName(contactName);
                    person.setPhone(phone);
                } catch (NullPointerException e){
                    L.m("Null pointer hit on person");
                }
                if(contactName != null && email != null){
                    contactList.add(person);
                }
            }
        }
        people.close();
        return contactList;
    }

有没有人就如何加快这个过程提出任何建议,或者更好地了解我想要实现的目标?谢谢!

-Sil

0 个答案:

没有答案