如何检查Firebase中是否已存在密钥

时间:2019-03-14 18:21:26

标签: android firebase-realtime-database

我正在开发一种考勤管理系统。如果用户的出勤已被标记为当前日期,我希望显示一条敬酒消息,否则我想设置他们的出勤。

我正在使用新日期作为出勤键。现在,我要检查新日期是否已在节点中。

您可以在下图中看到我的数据库的格式。

Database Image

现在在mktime中,我想检查当前日期是否可用并上传出席人数,否则请显示祝酒词,表明已经标记了出席人数。

我该怎么做?

addValueEventListener

1 个答案:

答案 0 :(得分:1)

由于您错过了问题中的某些信息,因此我做出了以下假设:

  • 您要查询存储在字符串userId中的日期在存储在字符串date中的用户ID。
  • AttendRef是指向DatabaseReference的{​​{1}}
  • 给定日期是给定用户ID查找和更改的唯一日期。

首先,我强烈建议您将日期存储的方式更改为ISO 8601格式。在Java中,这由格式Users/{userId}/Attendance给出。原因是Firebase会正确地将日期从最旧到最新进行排序。

根据您的问题和上述假设,您可以直接查询数据库中的数据,而不必浪费所有资源在“考勤”下下载所有数据,然后进行遍历。

"yyyy-MM-dd"

在上面的代码中,使用SimpleDateFormat DB_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); DatabaseReference DB_ROOT_REF = FirebaseDatabase.getInstance().getReference(); String userId = "bq7TqEwgluSiNRP7FDKanHptd9C2"; // the user to lookup String date = DB_DATE_FORMAT.format(new Date()); // save attendance for today's date DatabaseReference AttendRef = DB_ROOT_REF.child("Users").child(userId).child("Attendance"); AttendRef.child(date).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { // If data exists, toast currently stored value. Otherwise, set value to "Present" if (dataSnapshot.exists()) { Toast.makeText(ProfileAct.this, "Already marked as '" + dataSnapshot.getValue(String.class) + "'", Toast.LENGTH_SHORT).show(); } else { dataSnapshot.getRef().setValue("Present"); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { //TODO: Handle this } }); 很重要,否则此侦听器将由于addListenerForSingleValueEvent(...)而触发自身。

进一步阅读

相关问题