我是Firebase Realtime Database
的新用户,我想在父节点下生成唯一键而不使用 push()。由于push()生成随机数128位的唯一密钥。
我希望我的当前日期是父节点下的唯一键。如果date与父节点的最后一个子节点不匹配,则它必须在父节点中生成一个新节点。
下面提到的是我的代码:
Firebase reference = new Firebase("https://maps-abcdxyz.firebaseio.com/user");
if (s.equals("null"))
{
String key = reference.child("User").push().getKey();
String inStatus = "1";
UserData user = new UserData(attendIN,"0","0","0");
Map<String, Object> postValues = user.inoutTime();
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put( "/" + username + "/" + month_name + "/" + todayDate ,postValues);
reference.updateChildren(childUpdates);
Toast.makeText(getApplicationContext(),"In Time Submitted",Toast.LENGTH_SHORT).show();
}
else
{
if(jInStatus.equals("1"))
{
Toast.makeText(getApplicationContext(),"In time already Submitted",Toast.LENGTH_SHORT).show();
}
else
{
Firebase referenceDate = new Firebase("https://maps-abcdxyz.firebaseio.com/user/" + username +
"/" + month_name);
String inStatus = "1";
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
DatabaseReference myRef = mDatabase.getReference("/" + "user" + "/" + username + "/"+ month_name + "/");
UserData user = new UserData(attendIN,inStatus,"0","0");
Map<String, Object> postValues = user.inoutTime();
Map<String, Object> childUpdates = new HashMap<>();
myRef.child(todayDate).setValue(postValues);
Toast.makeText(getApplicationContext(),"In Time Submitted",Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:0)
Firebase数据库中的每个节点都是Map
。正如我在您的代码中看到的那样,即使您要添加数据或正在更新数据,也使用todayDate
的相同值。因此,在Map
的情况下,它将旧值替换为新值,最后只有一个孩子。
要解决此问题,您需要为节点使用不同的值。我建议您使用push()
方法提供的randon生成密钥,而不是使用日期。