首页 > 解决方案 > 如何同时更新不同的节点子节点firebase android

问题描述

在此处输入图像描述

我想根据条件更新时间段,例如当用户预订自行车开始时间上午 9:00 和结束时间下午 12:00 时,我想更新时间段从上午 9:00 到上午 12:00 可用性假。那么是否可以同时更新不同的孩子。或者请给我一条路径,我该怎么做。

                DatabaseReference ref= FirebaseDatabase.getInstance().getReference().child("TimeSlot").child(Common.BikeId);

            ref.orderByChild("TimeSlot").equalTo("10:00AM").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                   //update children


                }

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

                }
            });

在上面的代码中,我一次只能更新一个孩子如何解决这种解决方案。

标签: androidfirebasefirebase-realtime-database

解决方案


首先,你不能比较String匹配startAtendAt时间。而是使用[0 - 24]long之类的值以 24 小时格式保存时间。

然后,执行以下操作将孩子更新isAvailablefalse

DatabaseReference ref = FirebaseDatabase.getInstance().getReference()
        .child("TimeSlot")
        .child(Common.BikeId);

ref.orderByChild("time_slot")
        .startAt(9.0)
        .endAt(12.0)
        .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for(DataSnapshot childSnapshot: dataSnapshot.getChildren()) {

                    //Check whether child with key 'isAvailable' exist or not
                    if(childSnapshot.hasChild("isAvailable")) {

                        //Now update the status with false
                        ref.child(childSnapshot.getKey())
                                .child("isAvailable")
                                .setValue(false);
                    }
                }
            }

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

            }
        });

推荐阅读