Android 在同一类的ondatachange中使用setvalue

Android 在同一类的ondatachange中使用setvalue,android,firebase,Android,Firebase,我想从firebase中读取数据,以增加数据量并写回firebase。这是我的职责: StatData = FirebaseDatabase.getInstance().getReference("Statistic"); Getstat = FirebaseDatabase.getInstance().getReference("Statistic"); Getstat.addValueEventListener(new ValueEventL

我想从firebase中读取数据,以增加数据量并写回firebase。这是我的职责:

        StatData = FirebaseDatabase.getInstance().getReference("Statistic");

        Getstat = FirebaseDatabase.getInstance().getReference("Statistic");
        Getstat.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Stat stat = dataSnapshot.getValue(Stat.class);
                int count = stat.getStatP();
                int statP = count + 1;
                Stat a = new Stat(statP);
                StatData.setValue(a);

            }

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

            }
        });

我使用相同的类Stat来读写数据。是否可以使用它?

将基于节点当前值的值写入节点。您的示例如下:

postRef.runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        Stat stat = mutableData.getValue(Stat.class);
        if (stat == null) {
            // Node doesn't exist or its value isn't known yet => return success
            return Transaction.success(mutableData);
        }
        int count = stat.getStatP();
        int statP = count + 1;
        stat = new Stat(statP);

        // Set value and report transaction success
        mutableData.setValue(p);
        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
        // Transaction completed
        Log.d(TAG, "statTransaction:onComplete:" + databaseError);
    }
});

我想它会起作用……但你会得到一个无止境的循环。每次在
GetStat
listener中捕获更改时,您都将递增计数器,并在
GetStat
listener中捕获新更改,然后再次递增它……您确定要这样做吗?这是因为在数据库中,两个引用都针对相同的路径,基本上我只想增加一次。例如,Getstat从firebase读取数据,该值为1,然后在增量变为2后,Statdata会将其作为值2写回到firebase中感谢您的帮助