Мой recyclerview показывает двойные контакты, как получить только один контакт, если номер один и тот же, то он показывает только один контакт пользователя, а не двойной

# #java #android #firebase #firebase-realtime-database #android-recyclerview

Вопрос:

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

 package com.example.flashchat2.fragment;


public class ChatFragment extends Fragment {

public ChatFragment(){}
FragmentChatBinding binding;
FirebaseDatabase database;
UsersAdapter muserlistAdapter;
ArrayList<Users> contactlist,userlist;


@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable 
    Bundle savedInstanceState) {
    binding=FragmentChatBinding.inflate(getLayoutInflater());
    database = FirebaseDatabase.getInstance();
    contactlist=new ArrayList<>();
    userlist=new ArrayList<>();
    initializeRecyclerView();
    getContactList();
    return binding.getRoot();
}
 

//Где я получаю список контактов с телефона пользователя

    private void getContactList(){

    String ISOPrefix = getCountryISO();
    ContentResolver cr=getContext().getContentResolver();
    Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, 
null);
    try {
        contactlist.clear();
        while (phones.moveToNext()) {
            String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            phone = phone.replace(" ", "");
            phone = phone.replace("-", "");
            phone = phone.replace("(", "");
            phone = phone.replace(")", "");

            if (!String.valueOf(phone.charAt(0)).equals(" "))
                phone = ISOPrefix   phone;
            Users users = new Users();
            users.setName(name);
            users.setPhoneNumber(phone);
            contactlist.add(users);
            muserlistAdapter.notifyDataSetChanged();
            getUserDetails(users);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    phones.close();
}
 

//здесь мы можем сопоставить контакт пользователя с контактом пользователя firebase и показать только те контакты, которые доступны в телефонных контактах пользователей

 private void getUserDetails(Users users) {
    DatabaseReference mUserDB = FirebaseDatabase.getInstance().getReference().child("Users");
    Query query = mUserDB.orderByChild("phoneNumber").equalTo(users.getPhoneNumber());
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if(dataSnapshot.exists()){
                String  phone = "",
                        name = "";
 

//when i try to clear my arraylist but he show only last item in recycler view?

                //userlist.clear();
                try {
                    for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                        if (childSnapshot.child("phoneNumber").getValue() != null)
                            phone = childSnapshot.child("phoneNumber").getValue().toString();
                        if (childSnapshot.child("name").getValue() != null) {
                            name = childSnapshot.child("name").getValue().toString();
                        }
                        String image = childSnapshot.child("profileImage").getValue().toString();

                        Users mUser = new Users();
                        mUser.setUid(childSnapshot.getKey());
                        mUser.setName(name);
                        mUser.setPhoneNumber(phone);
                        mUser.setProfileImage(image);
                        if (name.equals(phone))
                            for (Users mContactIterator : contactlist) {
                                if (mContactIterator.getPhoneNumber().equals(mUser.getPhoneNumber())) {
                                    mUser.setName(mContactIterator.getName());
                                }
                            }
                            if (!phone.equals(FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber()))
                                userlist.add(mUser);
                            muserlistAdapter.notifyDataSetChanged();
                            return;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
private String getCountryISO(){
    String iso = null;

    getContext();
    TelephonyManager telephonyManager = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
    if(telephonyManager.getNetworkCountryIso()!=null)
        if (!telephonyManager.getNetworkCountryIso().toString().equals(""))
            iso = telephonyManager.getNetworkCountryIso().toString();

    return CountryToPhonePrefix.getPhone(iso);
}
private void initializeRecyclerView() {
    binding.chatRecyclerview.setNestedScrollingEnabled(false);
    binding.chatRecyclerview.setHasFixedSize(false);
    LinearLayoutManager layoutManager=new LinearLayoutManager(getContext());
    binding.chatRecyclerview.setLayoutManager(layoutManager);
    muserlistAdapter = new UsersAdapter(getContext(),userlist);
    binding.chatRecyclerview.setAdapter(muserlistAdapter);
}
 

}