从联系人列表中删除重复项

时间:2018-01-01 08:41:49

标签: java android android-contacts

我一直在使用Android应用在列表中显示contacts。我正在使用recyclerview,我可以在列表中显示姓名和图片的联系人。

但我的清单中包含联系号码的副本。我使用下面的代码删除重复项,但它显示

9566191161 +919566191161作为两个条目。 (即。)与国家代码一起,它显示为一个单独的条目。

我正在使用POJO类并将其作为List添加到Adapter。在Pojo Class中,我使用编码来删除像

这样的重复项
  @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stubs
        if (obj instanceof ContactVO) {
            ContactVO temp = (ContactVO) obj;
            if (this.getContactNumber() == temp.getContactNumber() && this.getContactName() == temp.getContactName() && (this.getContactNumber()).contains(temp.getContactNumber()))
                return false;
        }
        return true;
    }

    @Override

    public int hashCode() {
        // TODO Auto-generated method stub
        return (this.getContactNumber().hashCode() + this.getContactName().hashCode());
    }
}

我在equals方法中使用了"+91"+this.getContactNumber().contains(temp.getContactNumber())验证,但它并没有删除该副本。

你们可以帮助我解决这个错误。

我的代码段

 Cursor phones = getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        while (phones.moveToNext()) {
            name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).replace(" ", "");
            imageUri = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
            System.out.println("Name and Phone number = " + name + phoneNumber + imageUri);


            contactVOList.add(new ContactVO(imageUri, name, phoneNumber));
            System.out.println("List size before removing duplicates =" + contactVOList.size());

        }

        Set<ContactVO> s = new HashSet<ContactVO>();
        s.addAll(contactVOList);
        contactVOList = new ArrayList<ContactVO>();
        contactVOList.addAll(s);


        // contactVOList = removeDuplicates(contactVOList);
        System.out.println("List size after removing duplicates =" + contactVOList.size());
        System.out.println("ListSize before sendinf" + contactVOList.size());
        mAdapter = new AllContactsAdapter(getContext(), contactVOList, userId, mobilenumber);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
        rvContacts.setLayoutManager(mLayoutManager);
        rvContacts.setItemAnimator(new DefaultItemAnimator());
        rvContacts.setAdapter(mAdapter);

祝新年快乐!

1 个答案:

答案 0 :(得分:0)

您可以与联系人ID进行比较,并创建唯一列表。

       ContentResolver cr = getContentResolver();
        Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, null);
        if (cursor != null) {
            try {
                final int idIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
                final int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                final int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);

                String name, phoneNo, id;
                while (cursor.moveToNext()) {
                    name = cursor.getString(nameIndex);
                    phoneNo = cursor.getString(numberIndex);
                    id = cursor.getString(idIndex);


                    Bitmap photo = null;

                    try {
                        InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),
                                ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(id)));

                        if (inputStream != null) {
                            photo = BitmapFactory.decodeStream(inputStream);
                            inputStream.close();
                        }




                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    //check for is same contact already added? - remove duplication
                    Contacts contacts = new Contacts();
                    contacts.setContactId(id);

                    int index = contactsArrayList.indexOf(contacts);
                    if(index == -1) { // not duplicate
                       // You can add contact here in list

                    }

                }
            } finally {
                cursor.close();
            }
        }

修改 在从arraylist中找到索引之后,您必须创建对象并设置值。

ContactVO contact = new ContactVO();
contact.setContactNumber(+91000000);
int index = contactVOList.indexOf(contact); // if record not contain in list then return -1 otherwise return index of list.

if(index != -1)
contactVOList.remove(index);

更改pojo类:

@Override
public boolean equals(Object obj) {

     return getContactNumber().equals(((ContactVO)obj).getContactNumber());

}