我一直在使用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);
祝新年快乐!
答案 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());
}