我正在研究出勤管理系统。我希望用户每天标记一次出勤率。
我如何设置一个限制允许用户每天标记一次..我点击按钮后点击或我可以在数据库逻辑中做一些事情。
DBreference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
String present ="Present";
DBreference.child("Attendance").child(currentDateTimeString).setValue(present);
Toast.makeText(ProfileAct.this, "Marked as Present", Toast.LENGTH_SHORT).show();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
break;
case R.id.cardLeave:
DBreference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
String present ="On Leave";
DBreference.child("Attendance").child(currentDateTimeString).setValue(present);
Toast.makeText(ProfileAct.this, "Marked As Leave", Toast.LENGTH_SHORT).show();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});`
只为当天而不是时间添加一个监听器到您的路径:
Date cDate = new Date();
String fDate = new SimpleDateFormat("yyyy-MM-dd").format(cDate);
e.g. DBreference.child("Attendance").(fDate)
并在此路径上添加值“Present”或“Absent”。
然后在此路径上附加ValueEventListener。并且您在onDataChange中获得此路径中存在的值的回调,如果找到值,您可以禁用按钮或视图。
您的数据库需要根据日期创建每日条目,然后您将从前端检查用户是否参加,如果是,那么您需要在数据库中存储布尔标志,您必须在用户出席之前检查他/她已经给过或不使用那面旗帜。
最好的事情是实际上有一个出勤节点。 Firebase鼓励平面数据而不是嵌套数据。然后,您可以为每天创建一个孩子,用户可以检查当天。这样即使您的数据查询也更容易。这是一个例子
attendance : {
"12/03/2019" : {
"UID" : "time stamp"
},
"11/03/2019" : {
"UID" : "time stamp"
}
}