how to remove duplicate contact from contact list in android
This is worked form me
private void getContactDetails(ContentResolver contentResolver) {
Cursor phones = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
null, null);
HashSet<String> mobileNoSet = new HashSet<String>();
while (phones.moveToNext()) {
String name = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String email = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));
String imagUri = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO_URI));
long id = phones.getColumnIndex(ContactsContract.Contacts._ID);
if (!mobileNoSet.contains(phoneNumber)) {
arrayContacts.add(new Contact(name, phoneNumber, email,
imagUri, id));
mobileNoSet.add(phoneNumber);
}
}
adapterContact = new AdapterContact(getActivity(), arrayContacts);
listContact.setAdapter(adapterContact);
}
You should modify your ContactsEntityBean
like below
public class ContactsEntityBean {
private HashSet<String> emails = new HashSet<String>();
public void setEmail(String email) {
if (email == null)
return;
this.emails.add(email.trim());
}
public HashSet<String> getEmails() {
return this.emails;
}
}
Will care about duplicate emails... you can use same logic for addresses, phones etc.
Replace your ContactsEntityBean
with below code
public class ContactsEntityBean {
private HashSet<String> emails;
private HashSet<String> phones;
private HashSet<String> addresses;
private String contactId;
private boolean checked = false;
public ContactsEntityBean() {
this.emails = new HashSet<String>();
this.phones = new HashSet<String>();
this.addresses = new HashSet<String>();
}
public HashSet<String> getPhones() {
return phones;
}
public void setPhones(String phone) {
if (phone == null)
return;
this.phones.add(phone.trim());
}
public HashSet<String> getAddresses() {
return addresses;
}
public void setAddresses(String address) {
if (address == null)
return;
this.addresses.add(address.trim());
}
public void setEmails(String email) {
if (email == null)
return;
this.emails.add(email.trim());
}
public HashSet<String> getEmails() {
return emails;
}
public String getContactId() {
return contactId;
}
public void setContactId(String contactId) {
this.contactId = contactId;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
}
And no need to care about duplicates. this will care about all the things..