首页 > 解决方案 > 从 firebase 添加数据会导致无限循环

问题描述

请帮忙,当我想从 Firebase 数据库添加用户点数据时遇到问题

在此处输入图像描述

我想将前一个用户的点添加到新获得的点上。这是我使用的代码

final DatabaseReference userDataRef = FirebaseDatabase.getInstance().getReference().child("Users").child(userRefEmail);
    userDataRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String userCurrentPoint = dataSnapshot.child("point").getValue().toString();

            if (userCurrentPoint != null) {
                int finalPoint = Integer.parseInt(userCurrentPoint) + poin;
                userDataRef.child("point").setValue(String.valueOf(finalPoint));
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });

但是在我使用的时候,firebase 数据库中出现了无限连续加点的情况,我该如何处理呢?

标签: javaandroidfirebaseasynchronousfirebase-realtime-database

解决方案


使用SingleValueEvent而不是ValueEventListenerSingleValueEvent它只会被调用一次:

    userDataRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String userCurrentPoint = dataSnapshot.child("point").getValue().toString();

            if (userCurrentPoint != null) {
                int finalPoint = Integer.parseInt(userCurrentPoint) + poin;
                userDataRef.child("point").setValue(String.valueOf(finalPoint));
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });

推荐阅读