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

#java #android

#java #Android

Вопрос:

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

 package com.example.contentprovider;

import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;


public class MainActivity extends AppCompatActivity {

// Cursor Adapter for storing contacts data
SimpleCursorAdapter adapter;

// List View Widget
ListView lvContacts;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Init ListView
    lvContacts = (ListView) findViewById(R.id.lvContacts);

    // Initialize Content Resolver object to work with content Provider
    ContentResolver cr = getContentResolver();

    // Read Contacts
    Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI,
            new String[] { ContactsContract.Contacts._ID,
                    ContactsContract.Contacts.DISPLAY_NAME }, null, null,
            null);


    // Attached with cursor with Adapter
    adapter = new SimpleCursorAdapter(this, R.layout.row, c,
            new String[] { ContactsContract.Contacts.DISPLAY_NAME },
            new int[] { R.id.lblName });

    // Display data in listview
    lvContacts.setAdapter(adapter);

}
}
 

Ответ №1:

Я бы посоветовал вам добавить все контакты в список и удалить дубликаты с помощью hashset. потому что hashset не допускает повторяющихся элементов.

 psedo code:---
1. Once get all object like name,phone number from contentResolver then add those string objet into arraylist 
2. After that pass taht list to hashset so duplicate will be removed.

ArrayList<String> values=new ArrayList<String>();
HashSet<String> hashSet = new HashSet<String>();
hashSet.addAll(values);
values.clear();
values.addAll(hashSet);
it might be helpful for you .
 

Комментарии:

1. я не понял этот код и куда его поместить . пожалуйста, измените мой код.

2. Я изменил свой ответ

3. Уважаемый, на самом деле я полностью новичок в Android, я не знаю, как добавить объект в строку, поэтому я попросил вас изменить мой код. Код приведен выше. Еще раз спасибо

Ответ №2:

найти дубликат контакта из массива контактов

 private ArrayList<PhoneContact> findDuplicates1(ArrayList<PhoneContact> phoneContacts) {

    int i;
    ArrayList<PhoneContact> list2 = new ArrayList<>();
    PhoneContact contact;
    int count ;
    for (i = 0; i < phoneContacts.size() ; i  ){
        String contact1 = phoneContacts.get(i).getContactNumber();
        contact = phoneContacts.get(i);

        count = 0;
        list2.add(contact);

        for (int j = i 1 ;j < phoneContacts.size() ; j   )
        {
            String contact2 = phoneContacts.get(j).getContactNumber();
            if (contact1.equals(contact2) || contact1.equals(" 91" contact2) || contact2.equals(" 91" contact1)){
                phoneContacts.get(j).setCheck(true);
                PhoneContact contact11 = phoneContacts.get(j);
                count = 1;
                list2.add(contact11);
                phoneContacts.remove(j);
            }
        }
        if (count == 0)
        {
            list2.remove(contact);
            count=0;
        }
    }
    return list2;
}
 

здесь просто передайте свой Contact ArrayList и верните список повторяющихся контактов