首页 > 解决方案 > Firebase onDataChange 方法增加值

问题描述

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

这是我的代码:

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) {

                }
            });

标签: androidfirebase-realtime-database

解决方案


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

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

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


推荐阅读