Search code examples
androidwhile-loopandroid-contactsandroid-cursor

trying to match corresponding Cursor records in my Android App


In my onCreate I have a Cursor called phones:

    // this query only return contacts with phone number and is not duplicated
        phones = getContentResolver().query(
//                the table to query
                ContactsContract.Contacts.CONTENT_URI,
//                the columns to return
                null,
//               selection criteria :
// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0)
                ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1",
//               selection criteria
                null,
//                display in ascending order
                ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

// phones.getCount returns 134 records, which is the correct number of contacts with corresponding phone number.

I loop through to get the names of all the 134 contacts :

  if (phones != null) {


            if (phones.getCount() == 0) {
                Toast.makeText(MainActivity.this, "No contacts in your contact list.", Toast.LENGTH_LONG).show();
            }

            while (phones.moveToNext()) {


                String name = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

Now I need to get the 134 matching phone numbers. Just below the last line above, still in the While Loop, I make a new Cursor, phonestwo :

    // phoneContactId returns 134 records, which is the correct number - it matches the number of contacts with corresponding phone numbers.
        String phoneContactId = phones.getString(phones.getColumnIndexOrThrow(BaseColumns._ID));


        phonestwo = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                                    new String[]{phoneContactId},
                                    null);



        while (phonestwo.moveToNext()) {
        int phoneType = phonestwo.getInt(phonestwo.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.TYPE));
        String phoneNumber = phonestwo.getString(phonestwo.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));


//For every contact in the phonebook, show the name and number
        SelectContact selectContact = new SelectContact();
        selectContact.setName(name);
        selectContact.setPhone(phoneNumber);
        selectContacts.add(selectContact);
                            }


                        }

                    }

                    phones.close();
                    return null;
                }

In my Logcat,

I have 134 "phones" records, which is correct.

I have 134 "phoneContactId" records, which is correct.

I have 1 and sometimes 2 "phonestwo" records. But I want the number of phonestwo records to be 134, the matching phone numbers for the 134 contacts. Any ideas?

Here's a snippet of my logcat:

04-09 01:22:42.384    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.384    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 2
04-09 01:22:42.384    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1191
04-09 01:22:42.394    8934-8934/com.example.chris.contactlistcustomlistview D/OpenGLRenderer﹕ Enabling debug mode 0
04-09 01:22:42.404    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.404    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 2
04-09 01:22:42.404    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 2314
04-09 01:22:42.414    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.414    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1
04-09 01:22:42.414    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1076
04-09 01:22:42.424    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.424    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1
04-09 01:22:42.424    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 643
04-09 01:22:42.454    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.454    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1
04-09 01:22:42.454    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 746
04-09 01:22:42.474    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.474    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1
04-09 01:22:42.474    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1690
04-09 01:22:42.504    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.504    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1
04-09 01:22:42.504    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1055
04-09 01:22:42.524    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.524    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1
04-09 01:22:42.524    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 945
04-09 01:22:42.554    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.554    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 2
04-09 01:22:42.554    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 226
04-09 01:22:42.564    8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134
04-09 01:22:42.564    8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1
04-09 01:22:42.564    8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 267

Solution

  • public class MainActivity extends Activity {
    
    
        Cursor cursor;
        ListView mainListView;
        ArrayList hashMapsArrayList;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            if (cursor != null) {
                cursor.moveToFirst();}
            try {
    
                cursor = getApplicationContext().getContentResolver()
                        .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
                int Idx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
                int nameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
    
                int phoneNumberIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                int photoIdIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI);
                cursor.moveToFirst();
    
    
                Set<String> ids = new HashSet<>();
                do {
                    System.out.println("=====>in while");
                    String contactid=cursor.getString(Idx);
                    if (!ids.contains(contactid)) {
                        ids.add(contactid);
                        HashMap<String, String> hashMap = new HashMap<String, String>();
                       String  name = cursor.getString(nameIdx);
                        String phoneNumber = cursor.getString(phoneNumberIdx);
                        String image = cursor.getString(photoIdIdx);
                        System.out.println("Id--->"+contactid+"Name--->"+name);
                        System.out.println("Id--->"+contactid+"Name--->"+name);
                        System.out.println("Id--->"+contactid+"Number--->"+phoneNumber);
    
                        if (!phoneNumber.contains("*")) {
                            hashMap.put("contactid", "" + contactid);
                            hashMap.put("name", "" + name);
                            hashMap.put("phoneNumber", "" + phoneNumber);
                            hashMap.put("image", "" + image);
                            // hashMap.put("email", ""+email);
                            if (hashMapsArrayList != null) {
                                hashMapsArrayList.add(hashMap);}
    //                    hashMapsArrayList.add(hashMap);
                        }
                    }
    
                } while (cursor.moveToNext());
    
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
            }
    }
    }