1

Im trying to save the users contacts in an ArrayList <Contacts> but somehow I got duplicates in it. I found out that I should use

ContractsContact.Contacts.CONTENT_URI

and not

ContractsContact.DATA.CONTENT_URI

But its not helping me. I still got dublicates in my ArrayList. Here is my code :

Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
String _ID = ContactsContract.Contacts._ID;
String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;

Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
ContentResolver contentResolver = context.getContentResolver();

Cursor cursor = contentResolver.query(CONTENT_URI, null,null, null, null);
// Loop for every contact in the phone
if (cursor.getCount() > 0) {

        while (cursor.moveToNext()) {

            String contact_id = cursor.getString(cursor.getColumnIndex( _ID ));
            String name = cursor.getString(cursor.getColumnIndex( DISPLAY_NAME ));

            int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex( HAS_PHONE_NUMBER )));

            if (hasPhoneNumber > 0) {

                // Query and loop for every phone number of the contact
                Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?", new String[]{contact_id}, null);

                while (phoneCursor.moveToNext()) {
                    phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER));

                    if (phoneNumber.charAt(0) == '0' && phoneNumber.charAt(1) == '0')
                    {
                        String temp = "+";
                        for(int j=2;j<phoneNumber.length();++j)
                            temp += phoneNumber.charAt(j);

                        phoneNumber = temp;
                    }

                    if (!phoneNumber.contains("+"))
                    {
                        PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
                        Phonenumber.PhoneNumber normalized_number = null;

                        TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
                        String current_iso_code = telephonyManager.getSimCountryIso();
                        current_iso_code = current_iso_code.toUpperCase();

                        try {
                            normalized_number = phoneUtil.parse(phoneNumber,current_iso_code);
                        }catch(Exception e){
                            e.printStackTrace();
                        }

                        String str_normalized_number = phoneUtil.format(normalized_number, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL);

                        str_normalized_number = str_normalized_number.replaceAll(" ","");
                        str_normalized_number = str_normalized_number.replaceAll("\\(","");
                        str_normalized_number = str_normalized_number.replaceAll("\\)","");

                        contacts.add(new Contact (name,str_normalized_number,current_iso_code,contact_id));
                    }
                    else {
                        phoneNumber = phoneNumber.replaceAll(" ","");
                        phoneNumber = phoneNumber.replaceAll("\\(","");
                        phoneNumber = phoneNumber.replaceAll("\\)","");
                        phoneNumber = phoneNumber.replaceAll("-","");

                        String iso_code = null;
                        PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();

                        try {
                            Phonenumber.PhoneNumber numberProto = phoneUtil.parse(phoneNumber, "");
                            iso_code = phoneUtil.getRegionCodeForNumber(numberProto);
                        }catch(Exception e){}


                        contacts.add(new Contact (name,phoneNumber,iso_code,contact_id));
                    }


                }

                phoneCursor.close();
            }
        }

Is there a wrong part in my code which I'm not seeing ?

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Ahmet K
  • 713
  • 18
  • 42

1 Answers1

1

I think Hash set Concept in Java may help to solve this problem as it removes duplicate items.I hope it will address the problem The following link may help in this regard.

Removing Duplicate Values from ArrayList

Community
  • 1
  • 1
  • Maybe thats an Idea but its still not an efficient one right ? There have to be something wrong in my loop. It would be much faster if I find a solution which doesn't need more steps than the actual – Ahmet K Jan 17 '16 at 21:26