Neeraj Kumar
Neeraj Kumar

Reputation: 655

Best way to retrieve contact list

I am developing a contact app having three fragments (callLog,contactList,favoriteContactList). when moving one to another fragment, it takes time to retrieve all contacts. I have approx 276 contacts on my device. Any solution to this which reduce time.

ContentResolver cr = getContext().getContentResolver();
        String[] projection = {ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts.PHOTO_URI,
                ContactsContract.Contacts.HAS_PHONE_NUMBER};

        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
        String id, name, image_uri, phone = "";

        if (cur != null && cur.getCount() > 0) {
            while (cur.moveToNext()) {

                id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                image_uri = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));

                Log.d(TAG, " name " + name + " id " + id);

                // phone number
                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
                    if (pCur != null && pCur.moveToNext()) {

                        phone = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        int colIndex = pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
                        int lblIndex = pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL);
                        int labelType = pCur.getInt(colIndex);
                        String phoneType;

                        if (labelType == ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM) {
                            phoneType = pCur.getString(colIndex);
                        } else {
                            phoneType = String.valueOf(ContactsContract.CommonDataKinds.Phone.getTypeLabel(this.getResources(), labelType, "Mobile"));
                        }

                        Log.d(TAG, phoneType + " " + phone);
                        pCur.close();
                    }
                    mContactArrayList.add(new Contact(id, name, phone, image_uri));
                }
            }
            cur.close();
        }

Upvotes: 0

Views: 112

Answers (1)

Shivam Sharma
Shivam Sharma

Reputation: 420

Try This one code

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    while (phones.moveToNext()) {
        String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
        String image_uri = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));

        mContactArrayList.add(new Contact(id, name, phone, image_uri));

    }

I think it works.

Upvotes: 2

Related Questions