在 firebase android studio 中更新节点时无限循环

infinite looping when updating nodes in 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 请帮忙

我试图在数据库中更改的数据:

当您在路径上调用 addValueEventListener 时,您的 onDataChange 会立即使用路径中的当前值被调用,并且当路径下的任何数据发生变化时它也会被调用。

由于您写回 onDataChange 中的相同路径,这会再次触发侦听器,这会再次调用您的 onDataChange,然后再次写入相同的路径,从而触发侦听器再次....等等

如果您只想 read the data once,请使用 get()addListenerForSingleValueEvent:

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