android - 如何同时更新不同的节点子节点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) {
}
});
在上面的代码中,我一次只能更新一个孩子如何解决这种解决方案。
解决方案
首先,你不能比较String
匹配startAt
和endAt
时间。而是使用[0 - 24]long
之类的值以 24 小时格式保存时间。
然后,执行以下操作将孩子更新isAvailable
为false
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) {
}
});
推荐阅读
- javascript - jQuery .html() 不适合 div
- javascript - 全局错误处理程序 react/redux saga 并重定向外部组件
- laravel - 如何根据选择菜单更改页面语言?
- html - 将 p5 画布放入 DOM 元素中作为背景
- ruby-on-rails-4 - 连接中大于条件的 Rails
- java - Neo4j 驱动程序在玩
- sql-server - 执行选择语句的结果,这又是选择查询
- matlab - Matlab`outerjoin`:如何为`Keys`指定`RowNames`
- reactjs - react、router、redux、react-intl如何一起使用?
- java - 扫雷瓷砖价值问题