I'm writing a program to display my contact list in hp, but I always get duplicate contacts. Where is my code not correct?
This is my code
Here I'm confused how to make a filter where duplicate contacts do not need to be added to the listview:
contactModelArrayList = new ArrayList<>();
String[] projection = new String[]{
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
};
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'",
null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" COLLATE LOCALIZED ASC");
while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
ContactModel contactModel = new ContactModel();
contactModel.setName(name);
contactModel.setNumber(phoneNumber);
contactModelArrayList.add(contactModel);
}
phones.close();
contactAllAdapter = new ContactAllAdapter(this,contactModelArrayList);
listView.setAdapter(contactAllAdapter);
And this for file ContactAll Adapter
public class ContactAllAdapter extends BaseAdapter {
private Context context;
private ArrayList<ContactModel> contactModels;
private String kode, nomor;
public ContactAllAdapter(Context context, ArrayList<ContactModel> contactModels) {
this.context = context;
this.contactModels = contactModels;
}
@Override
public int getViewTypeCount() {
if(getCount() > 0){
return getCount();
}else{
return super.getViewTypeCount();
}
}
@Override
public int getCount() {
return contactModels.size();
}
@Override
public Object getItem(int position) {
return contactModels.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_all_contact, null, true);
holder.cname = convertView.findViewById(R.id.contact_name);
holder.cnumber = convertView.findViewById(R.id.contact_number);
holder.cinvite = convertView.findViewById(R.id.contact_invite);
convertView.setTag(holder);
}else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder)convertView.getTag();
}
holder.cname.setText(contactModels.get(position).getName());
holder.cnumber.setText(contactModels.get(position).getNumber());
holder.cinvite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String appPackageName = context.getPackageName();
String text = context.getResources().getString(R.string.share_app_text);
String link = "https://play.google.com/store/apps/details?id=" + appPackageName;//app link is auto generated by using package name
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", text+"\n\n"+link);
sendIntent.putExtra("address", contactModels.get(position).getNumber());
sendIntent.setType("vnd.android-dir/mms-sms");
context.startActivity(sendIntent);
}
});
return convertView;
}
private class ViewHolder {
protected TextView cname, cnumber;
protected Button cinvite;
}
}
And this file class of Contact Model
public class ContactModel {
private String name, number;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}