Firebase onDataChange 方法增加值

tso*_*gam 1 android firebase-realtime-database

我正在尝试获取一个值,然后将该值增加一。问题是我无法从 onDataChange 方法中获取这个值,如果我在方法内完成工作,我会得到循环,并且它不断地向这个值添加1。我应该怎么办?

这是我的代码:

rootRef.child("users").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    int rat = Integer.parseInt(dataSnapshot.child(current_user).child("rating").getValue().toString());

                    System.out.println(rat);

                    rat = rat + 1;

                    rootRef.child("users").child(current_user).child("rating").setValue(rat);

                    System.out.println(rat);
                }

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

                }
            });
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您需要从 firebase db 接收一次数据,那么您需要使用addListenerForSingleValueEvent(...)而不是 addValueEventListener(...). 然后onDataChange()只会返回一次。

addValueEventListener每次有任何值更新时都会调用。

在上述情况下,每次增加值并再次更新节点时addValueEventListener都会被重复调用,因此它的行为就像无限循环。