Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何阻止两个或多个预订同一停车位的人_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何阻止两个或多个预订同一停车位的人

Java 如何阻止两个或多个预订同一停车位的人,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在研究停车位预订系统。我的项目工作正常,但我面临一个问题,当任何用户请求插槽时,它首先检查插槽状态,如果插槽状态为空闲,则它会将用户移动到下一个预订活动,但问题是,如果两个或多个用户同时尝试,则所有用户都会移动到下一个预订活动,并且所有用户都会同时预订一个插槽。我希望一次只有一个用户能够保留插槽。这是我的密码 DatabaseReference reference=FirebaseDatabase.getInstance().getReference().child("parkin

我正在研究停车位预订系统。我的项目工作正常,但我面临一个问题,当任何用户请求插槽时,它首先检查插槽状态,如果插槽状态为空闲,则它会将用户移动到下一个预订活动,但问题是,如果两个或多个用户同时尝试,则所有用户都会移动到下一个预订活动,并且所有用户都会同时预订一个插槽。我希望一次只有一个用户能够保留插槽。这是我的密码

DatabaseReference reference=FirebaseDatabase.getInstance().getReference().child("parkingslots").child(slotkey);

if(reference.child("status").equals("free")) {
    HashMap<String, String> map = new HashMap<>();
    map.put("car_number", cnumber);
    map.put("date", d + "/" + m + "/" + y);
    map.put("entrance_time", h1 + ":" + m1 + ":" + am_pm1);
    map.put("exit_time", h2 + ":" + m2 + ":" + am_pm2);
    map.put("payment_status", "pending");
    map.put("slot_id", slotkey);
    map.put("user_id", uid);
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("booking").push();
    ref.setValue(map);

    reference.child("status").setValue("booked");
    Toast.makeText(this, "Slot Booked", Toast.LENGTH_LONG).show();
    Intent i = new Intent(Booking.this, MainActivity.class);
    startActivity(i);
    finish();
} else {
    Toast.makeText(this, "Sorry! Slot just booked", Toast.LENGTH_LONG).show();
    Intent i = new Intent(Booking.this, MainActivity.class);
    startActivity(i);
    finish();
}
DatabaseReference=FirebaseDatabase.getInstance().getReference().child(“停车场”).child(slotkey);
如果(参考子项(“状态”)等于(“自由”){
HashMap=newHashMap();
地图放置(“车号”,cnumber);
地图放置(“日期”,d+“/”+m+“/”+y);
地图放置(“入口时间”,h1+“:”+m1+“:”+am\U pm1);
地图放置(“出口时间”,h2+:“+m2+”:“+am\U pm2”);
map.put(“付款状态”、“待定”);
map.put(“slot_id”,slotkey);
map.put(“用户id”,uid);
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child(“预订”).push();
参考设定值(map);
参考。子(“状态”)。设定值(“记账”);
Toast.makeText(此“插槽已预订”,Toast.LENGTH_LONG).show();
意向i=新意向(Booking.this,MainActivity.class);
星触觉(i);
完成();
}否则{
Toast.makeText(这是“对不起!插槽刚刚预订”,Toast.LENGTH_LONG.show();
意向i=新意向(Booking.this,MainActivity.class);
星触觉(i);
完成();
}
您需要:

  • 在客户端代码中,确保只有一个客户端可以申请停车位
  • 在服务器上,只有所有者可以覆盖现有保留

  • 嗨,萨米。看来你的问题吸引了一些反对票。我不确定这是为什么,因为这似乎是一个合理的问题。我在下面提供了一个答案,所以请让我知道这一切是否有意义。您能解释一下您的答案吗?我如何通过使用事务增加新的价值。我看到了文档,但这只是关于在事务的帮助下更新值。事务总是首先读取它更新的文档,所以它应该非常简单。如果您在使事务正常工作方面遇到困难,那么显示您已经尝试过的内容是最容易得到帮助的。您的代码没有显示任何事务,因此我建议从我链接的文档中的示例开始,或者从其他许多文档中的一个开始。我还建议使用需要唯一的值来构造数据库键,而不是使用
    push()
    生成随机on。只有通过具有可重复(幂等)键,才能保证唯一性。