How to choose unique contacts from Android

I want to select unique contacts from Android only for those contacts that have phone numbers. I am using this code

ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME); // Find the ListView resource. mainListView = (ListView) findViewById(R.id.mainListView); // When item is tapped, toggle checked properties of CheckBox and // Planet. mainListView .setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View item, int position, long id) { ContactsList planet = listAdapter.getItem(position); planet.toggleChecked(); PlanetViewHolder viewHolder = (PlanetViewHolder) item .getTag(); viewHolder.getCheckBox().setChecked(planet.isChecked()); } }); // Create and populate planets. planets = (ContactsList[]) getLastNonConfigurationInstance(); // planets = new Planet[10]; // planets.Add("asdf"); ArrayList<ContactsList> planetList = new ArrayList<ContactsList>(); String phoneNumber = null; String phoneType = null; count = cur.getCount(); contacts = new ContactsList[count]; if (planets == null) { if (cur.getCount() > 0) { planets = new ContactsList[cur.getCount()]; int i = 0; // while (cur.moveToNext()) { String id = cur.getString(cur .getColumnIndex(ContactsContract.Contacts._ID)); String name = cur .getString(cur .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); if (Integer .parseInt(cur.getString(cur .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { // Query phone here. Covered next Cursor pCur = cr .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); // WHILE WE HAVE CURSOR GET THE PHONE NUMERS while (pCur.moveToNext()) { // Do something with phones phoneNumber = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)); phoneType = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); Log.i("Pratik", name + " PHONE :" + phoneNumber); Log.i("Pratik", "PHONE TYPE :" + phoneType); } pCur.close(); } planets = new ContactsList[] { new ContactsList(name, phoneNumber) }; contacts[i] = planets[0]; planetList.addAll(Arrays.asList(planets)); i++; } } 

This code retrieves all contacts and puts them in a list. but I want unique contacts and only those that don’t have a phone. How can i do this?? Is there any method to pass any argument in the request only to select unique contacts?

+6
source share
3 answers

I think you mean that you have a duplicate entry for some contacts. Therefore, you must add a condition for your request. A substantial part of the contacts should be in the visible group and have a phone number .

 String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'"; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; cur = context.getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, projection, selection + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", null, sortOrder);// this query only return contacts which had phone number and not duplicated 
+11
source

It works for me to contact the phone number. Here we request a data table and use the CONTACT_ID supplier contact documentation

  @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { final String ORDER_BY = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " ASC"; final String[] PROJECTION = { ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY, ContactsContract.CommonDataKinds.Phone.NUMBER }; return new CursorLoader( context, ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, ORDER_BY ); } 
+1
source

easy way to get contact names and names

 // set as global Set<string> phonenumbersList = new HashSet<string>(); Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //contact has name number and phonenumber does not exists in list if ( phoneNumber != null && name != null && !phonenumbersList.contains(phoneNumber)){ planets = new ContactsList[]{ new ContactsList(name, phoneNumber) }; phonenumbersList.add(phoneNumber); planetList.addAll(Arrays.asList(planets)); planetList.Add(phoneNumber, name); } } phones.close(); 
0
source

All Articles