我正在使用公交车预订应用程序。因此,每当用户预订行程时,我都会存储该特定行程的凭证(名称,电子邮件)。我需要限制该乘车的预订数量(每次乘车仅20张)。为此,我正在使用Firebase事务。但是,如何限制他们在一天中的特定时间多次预订。谁能告诉我如何?下面是我的数据库代码(mref1是我要存储预订数量的位置)
private DatabaseReference mTime1;
private DatabaseReference mTime2;
private DatabaseReference mCount1;
private DatabaseReference mCount2;
private FirebaseAuth mAuth;
private static final String TAG = "BookingActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_booking);
mAuth = FirebaseAuth.getInstance();
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mDatabase1 = FirebaseDatabase.getInstance().getReference().child("Time1");
mDatabase2 = FirebaseDatabase.getInstance().getReference().child("Time2");
mref1 = FirebaseDatabase.getInstance().getReference().child("Count@Time1");
mref2 = FirebaseDatabase.getInstance().getReference().child("Count@Time2");
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book(mDatabase1,mref1);
}
});
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book(mDatabase2,mref2);
}
});
}
public void Book(DatabaseReference mDatabase,DatabaseReference mref) {
final FirebaseUser user = mAuth.getCurrentUser();
HashMap<String,String>datamap = new HashMap<>();
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
if(user!=null) {
datamap.put("Name", user.getDisplayName());
datamap.put("Email", user.getEmail());
datamap.put("Timestamp",ts);
}
mDatabase.push().setValue(datamap);
Update(mref);
Toast.makeText(BookingActivity.this, "Booked Successfully", Toast.LENGTH_SHORT).show();
}
public void Update(DatabaseReference mDatabase) {
mDatabase.runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
Integer CurrentValue = mutableData.getValue(Integer.class);
mutableData.setValue(CurrentValue+1);
return Transaction.success(mutableData);
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
Log.d(TAG, "Updating count transaction is completed.");
}
});
}
答案 0 :(得分:1)
要解决此问题,您应该创建另一个名为users
的节点,并在其中添加用户对象。每个用户对象应具有一个名为numberOfRides
的属性,其默认值为0
(零)。第一次乘车后,将该数字增加到1
(一个),并且每当用户要进行另一次乘车时,请检查此属性的值。如果是0
,则让用户乘车,否则限制他乘车。然后,建议您在Cloud Functions for Firebase中编写一个函数,该函数可以将每个用户的numberOfRides
属性的值设置为0
(零)。最后,只需设置cron job即可在午夜之前调用此函数。就是这样!