【发布时间】:2019-03-30 22:37:39
【问题描述】:
我正在尝试制作一个使用实时数据库预订时间段的应用程序。问题是如果两个用户选择了当前空闲的某个时间段,并且他们都同时点击了书,数据被覆盖了。
我的预订技巧是插入一个键 = 时间戳和值 = 用户 ID 的节点。
因此,双方都认为他们为自己保留了空位,而实际上其中一个预订请求覆盖了数据库节点上的另一个。
我尝试使用 firebase 文档 Here 中的将数据另存为事务。但是,插槽预订仍然会相互覆盖。
这是我的代码:
dbRef.child(String.valueOf(selectedDate.getTime())).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
BookingSlot s = mutableData.getValue(BookingSlot.class);
if (s == null) {
//Upload new BookingSlot
dbRef.child(String.valueOf(selectedDate.getTime())).setValue(s);
);
}
return Transaction.success(mutableData);
} else {
Toast.makeText(BookingActivity.this,"Slot has just been booked!",Toast.LENGTH_LONG).show();
//The chosen time has just been booked,
}
return Transaction.abort();
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
// Transaction completed
Log.e("Booking", "postTransaction:onComplete:" + databaseError);
}
});
我在这里做错了吗?
【问题讨论】:
标签: android firebase firebase-realtime-database