如何更改firebase数据库中child的值?

cl25kdpy  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(337)

我想更改引用“betslip”下child“togglestatus”的值,如下所示。已经设置的值是“开”,所以我希望当我点击按钮时,“切换状态”的值变为“关”

BetSlipActivity.toggleCollapse.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String timeStamp = betSlip.get(position).getTimeStamp();
        String toggleStatus = betSlip.get(position).getToggleStatus();
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("BetSlip");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot ds: snapshot.getChildren()) {
                    String timestamp = ""+ ds.child("timeStamp").getValue();
                    String toggleStatus = ""+ ds.child("toggleStatus").getValue();
                    if (timeStamp.equals(timestamp) && toggleStatus.equals("on")) {
                        //set value to off
                    }
                    if (timeStamp.equals(timestamp) && toggleStatus.equals("off")) {
                        //set value to on
                    }
                }
            }

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

            }
        });
    }
});

x8diyxa7

x8diyxa71#

如果你有 DataSnapshot 对于数据库中的路径,很容易获得 DatabaseReference 您需要更新它:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference("BetSlip");
reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for (DataSnapshot ds: snapshot.getChildren()) {
            String timestamp = ""+ ds.child("timeStamp").getValue();
            String toggleStatus = ""+ ds.child("toggleStatus").getValue();
            if (timeStamp.equals(timestamp) && toggleStatus.equals("on")) {
                ds.child("toggleStatus").getRef().setValue("off");
            }
            if (timeStamp.equals(timestamp) && toggleStatus.equals("off")) {
                ds.child("toggleStatus").getRef().setValue("on");
            }
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        throw error.toException(); // never ignore errors
    }
});

由于您是基于节点的现有值来更新节点,严格来说,您可能需要为其使用事务。

相关问题