首页 > 解决方案 > 如何使用 android 应用程序快速获取所有联系人?

问题描述

我正在尝试获取手机的所有联系人,它正在获取但非常慢。我正在尝试快速获取。这需要时间,因为我使用了循环。我只想获取联系人姓名和电话号码。

private void getAllContacts() {
        ArrayList<ContactlistModel> contactVOList = new ArrayList();
        ContactlistModel contactVO;
        ContentResolver contentResolver = getActivity().getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
        if (cursor.getCount() > 0) {
            while (cursor.moveToNext()) {

                int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
                if (hasPhoneNumber > 0) {
                    String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                    contactVO = new ContactlistModel();
                    contactVO.setContact_name(name);

                    Cursor phoneCursor = contentResolver.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                            new String[]{id},
                            null);
                    if (phoneCursor.moveToNext()) {
                        String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        contactVO.setPhone_no(phoneNumber);
                    }
                    phoneCursor.close();
                    Cursor emailCursor = contentResolver.query(
                            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                            new String[]{id}, null);
                    while (emailCursor.moveToNext()) {
                        String emailId = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                    }
                    contactVOList.add(contactVO);
                    progressDialog.dismiss();
                }
            }
            contactAdapter = new ContactAdapter(getContext(),contactVOList, listener);
            list.setLayoutManager(new LinearLayoutManager(getActivity()));
            list.setAdapter(contactAdapter);
        }
    }

标签: android

解决方案


我从另一个问题中找到了以下代码,它对我有用。

   ArrayList<Contact> contacts = new ArrayList<Contact>();

    Cursor c = getActivity().getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
            null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + "asc");
    while (c.moveToNext()) {

        String contactName = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phNumber = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        Contact ct = new Contact();
        ct.setName(contactName);
        ct.setNumber(phNumber);

        contacts.add(ct);

    }
    c.close();

推荐阅读