在Arraylist中获取应该有联系人的副本

时间:2016-01-17 20:37:18

标签: java android android-contacts phone-number

我试图将用户联系人保存在ArrayList <Contacts>中但不知何故我在其中有重复项。我发现我应该使用

ContractsContact.Contacts.CONTENT_URI

而不是

ContractsContact.DATA.CONTENT_URI

但它没有帮助我。我的ArrayList仍然有同意。这是我的代码:

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();
            }
        }

我的代码中是否有错误的部分,我没有看到?

1 个答案:

答案 0 :(得分:1)

我认为Java中的Hash set Concept可能有助于解决这个问题,因为它删除了重复的项目。我希望它能解决这个问题 以下链接可能有助于此。

Removing Duplicate Values from ArrayList