2013-11-07 3 views
10

пожалуйста см: -как удалить дубликаты контактов из списка контактов в андроид

public static ArrayList<ContactsEntityBean> getContactDetails(
      Context mContext) { 
     ArrayList<ContactsEntityBean> contactList = new ArrayList<ContactsEntityBean>(); 
     ContentResolver cr = mContext.getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
       null, null, null); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String id = cur.getString(cur 
         .getColumnIndex(ContactsContract.Contacts._ID)); 
       Cursor cur1 = cr.query(
         ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
         null, ContactsContract.CommonDataKinds.Email.CONTACT_ID 
           + " = ?", new String[] { 
          id 
         }, null); 
       while (cur1.moveToNext()) { 
        ContactsEntityBean contactsEntityBean = new ContactsEntityBean(); 
        // to get the contact names 
        String name = cur1 
          .getString(cur1 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

        // Log.e("Name :", name); 
        String email = cur1 
          .getString(cur1 
            .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

        // Log.e("Email", email); 
        contactsEntityBean.setName(name); 
        contactsEntityBean.setEmail(email); 
        if (email != null) { 
         contactList.add(contactsEntityBean); 
        } 
       } 
       cur1.close(); 
      } 
     } 
     return contactList; 
    } 

этот метод возвращают несколько контактов с тем же пользователя, предположат, если я храню а @ gmail.com, а @ gmail.com. ком для того же пользователя, так что возвращается [email protected] & [email protected] , но я хочу только одну запись [email protected]

public static ArrayList<SearchEntityBean> getContactEmailDetails(
      Context mContext) { 
     ArrayList<SearchEntityBean> contactList = new ArrayList<SearchEntityBean>(); 


     try { 
      ContentResolver cr = mContext.getContentResolver(); 
      Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
        null, null, null); 
      if (cur.getCount() > 0) { 
       while (cur.moveToNext()) { 
        String email = ""; 
        String id = cur.getString(cur 
          .getColumnIndex(ContactsContract.Contacts._ID)); 

        Cursor cur1 = cr.query(
          ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Email.CONTACT_ID 
            + " = ?", new String[] { 
           id 
          }, null); 
        SearchEntityBean contactsEntityBean = new SearchEntityBean(); 
        while (cur1.moveToNext()) { 

         // to get the contact names 

         String name = cur1 
           .getString(cur1 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
         String image = cur1 
           .getString(cur1 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_ID)); 
         String mail = cur1 
           .getString(cur1 
             .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

         if (mail != null) { 
          if (!mail.equalsIgnoreCase(LoginPreferenceClass 
            .getEmailID(mContext))) 
           email = email + mail + ","; 
         } 
         // Log.e("rohit", "Contact Email :" + email); 
         contactsEntityBean.setName(name); 
         contactsEntityBean.setImage(image); 

        } 

        if (email != null) { 

         if (email.length() > 0) { 

          if (email.split(",").length > 1) { 

           contactsEntityBean.setMutipleEmail(true); 

          } 

          contactsEntityBean.setUserType("2"); 
          contactsEntityBean.setContactId(id); 
          contactsEntityBean.setEmail(email); 
          contactList.add(contactsEntityBean); 
         } 
        } 
        cur1.close(); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     HashSet<SearchEntityBean> hs = new HashSet<SearchEntityBean>(); 
     hs.addAll(contactList); 
     contactList.clear(); 
     contactList.addAll(hs); 
     return contactList; 
    } 
+0

вы хотите удалить его из базы данных контактов или от вашего арралиста. ?? –

+0

из моего списка массива не из списка контактов –

+0

contactsEntityBean code add here –

ответ

5

Вы должны изменить ваш ContactsEntityBean, как показано ниже

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; 
    } 
} 

будет заботиться о дублирующихся сообщений электронной почты ... Вы можете использовать ту же логику адресов, телефонов и т.д.


Заменить ContactsEntityBean с под кодом

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; 
    } 
} 

И не нужно заботиться о дубликатах. это будет заботиться обо всех вещах ..

+0

подробнее объясните, как он удалит дублированный контакт –

+0

@YogeshTatwal Добавлен код для класса ContactsEntityBean .. используйте этот , это позаботится обо всех дубликатах –

+0

спасибо pankaj Позвольте мне попробовать этот код –

1

Сохраните контакты в ArrayList, а затем удалить дубликаты из списка. Самый простой способ удалить повторяющиеся элементы - это добавить содержимое в Set (который не позволит дублировать), а затем добавить Set обратно в ArrayList.

Использовать HashSet вот так.

ArrayList al = new ArrayList(); 
// add elements to al, including duplicates 
HashSet hs = new HashSet(); 
hs.addAll(al); 
al.clear(); 
al.addAll(hs); 
+0

Он не работает .. :( –

+0

Каков выходной сигнал из набора ? –

+0

все еще показывает несколько abc @ gmail.com и abc @ gmail.com –

-1

После контакта электронной почты добавлен в ваш ArrayList положил continue после этого и использовать HashSet вместо ArrayList

if (email != null) { 
    contactList.add(contactsEntityBean); 
    continue; 
} 
+0

можете ли вы ответить на этот похожий вопрос? http://stackoverflow.com/questions/25801533/what-is-the-best-way-to-get-distinct-contacts-in-android –

2

Изменяя вам способ, как это ваш может получить только один контакт, который не дублирует ..

public static ArrayList<ContactsEntityBean> getContactDetails(Context mContext) { 
    ArrayList<ContactsEntityBean> contactList = new ArrayList<ContactsEntityBean>(); 
    ContentResolver cr = mContext.getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      null, null, null); 
    HashMap<String, String> data = new HashMap<String, String>(); 
    if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 
      String id = cur.getString(cur 
        .getColumnIndex(ContactsContract.Contacts._ID)); 
      Cursor cur1 = cr.query(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
        null, ContactsContract.CommonDataKinds.Email.CONTACT_ID 
          + " = ?", new String[] { id }, null); 
      while (cur1.moveToNext()) { 
       ContactsEntityBean contactsEntityBean = new ContactsEntityBean(); 
       // to get the contact names 
       String name = cur1 
         .getString(cur1 
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

       // Log.e("Name :", name); 
       String email = cur1 
         .getString(cur1 
           .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       if (!data.containsValue(email)) { 
        // Log.e("Email", email); 
        contactsEntityBean.setName(name); 
        contactsEntityBean.setEmail(email); 
        data.put(name, email); 
        if (email != null) { 
         contactList.add(contactsEntityBean); 
        } 
       } 


      } 
      cur1.close(); 
     } 
    } 
    return contactList; 
} 
+0

, пожалуйста, проверьте его один раз. –

+0

обновленный чек..и проверили и придут .. –

+0

вы можете ответить на этот похожий вопрос? http://stackoverflow.com/questions/25801533/what-is-the-best-way-to-get-distinct-contacts-in-android –

2

Это работается образуют мне

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); 
    } 
+0

thanks @CrazyMind –

+0

Он по-прежнему показывает дубликаты. Отображение дублированных чисел содержит пробелы в них. – kamranbhatti585

Смежные вопросы