Как я могу получить данные из базы данных firebase без повторения

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

 data = new ArrayList<>();

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("workers");
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                e_iv.setVisibility(View.GONE);
                e_tv.setVisibility(View.GONE);
                rv_all.setVisibility(View.VISIBLE);
                for (DataSnapshot ds : snapshot.getChildren()) {
                    for (DataSnapshot d : ds.getChildren()) {
                        data.add(d.getValue(work.class));
                    }
                    
                }
                mAdapter = new aAdapter(data);

                rv_all.setAdapter(allGamesAdapter);
                mAdapter.notifyDataSetChanged();
            }

Но это не решает эту проблему, и примечание: когда я выхожу из приложения и снова вхожу, оно работает отлично и показывает элементы без повторения кого-либо. Как я могу это решить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что происходит, так это то, что ArrayList добавляет данные каждый раз, когда слушатель возвращает данные. Чтобы удалить дубликаты, просто очистите список массивов внутри функции onDataChange().

data = new ArrayList<>();

DatabaseReference myRef = 
FirebaseDatabase.getInstance().getReference().child("workers");
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        if (snapshot.exists()) {

            data.clear();

            e_iv.setVisibility(View.GONE);
            e_tv.setVisibility(View.GONE);
            rv_all.setVisibility(View.VISIBLE);
            for (DataSnapshot ds : snapshot.getChildren()) {
                for (DataSnapshot d : ds.getChildren()) {
                    data.add(d.getValue(work.class));
                }
                
            }
            mAdapter = new aAdapter(data);

            rv_all.setAdapter(allGamesAdapter);
            mAdapter.notifyDataSetChanged();
        }

Надеюсь, ваша ошибка исправлена.

Другие вопросы по теме