Бесконечный цикл при обновлении узлов в Firebase Android Studio

Вот мой код

if (v == btnAddition) {
    dbRef = FirebaseDatabase.getInstance("https://mathcc-652c5-default-rtdb.asia-southeast1.firebasedatabase.app/").getReference("Quizzes").child("1");

    System.out.println(dbRef.child("addition").get().toString());

    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                QuizList quizList = snapshot.getValue(QuizList.class);

                String addition = quizList.getAddition();

                System.out.println(quizList.getAddition());

                if (addition.equals("yes")) {
                    QuizList quizList1 = new QuizList("no"
                            , quizList.getMultiplication()
                            , quizList.getSubtraction()
                            , quizList.getDivision()
                            , quizList.getMeasurement());

                    dbRef.setValue(quizList1);
                  return;
                } else if (addition.equals("no")) {
                    QuizList quizList1 = new QuizList("yes"
                            , quizList.getMultiplication()
                            , quizList.getSubtraction()
                            , quizList.getDivision()
                            , quizList.getMeasurement());

                    dbRef.setValue(quizList1);
                    return;
                }
            } else {
                QuizList quizList = new QuizList("yes", "yes", "yes", "yes", "yes");

                dbRef.setValue(quizList);
            }
        }


        @Override
        public void onCancelled(@NonNull DatabaseError error) {
        }
    });
}

он продолжает зацикливаться в вечности всякий раз, когда я нажимаю кнопку. Я не знаю, что я делаю неправильно. Я новичок в firebase и android, пожалуйста, помогите

Данные, которые я пытаюсь изменить в своей базе данных:

Бесконечный цикл при обновлении узлов в Firebase Android Studio

1
0
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Когда вы вызываете addValueEventListener на пути, ваш onDataChange вызывается сразу с текущим значением на пути, и затем он также будет вызываться всякий раз, когда какие-либо данные в пути изменяются.

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

Если вы хотите только прочитать данные один раз, используйте get() или addListenerForSingleValueEvent:

dbRef.addListenerForSingleValueEvent(new ValueEventListener() {
    ...

Это исправило это. Большое спасибо!

Jet 08.05.2022 22:43

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