如何在firebase实时android中的唯一密钥中添加额外的子节点



我想在唯一的密钥中包含姓氏以及全名和学生id。我很困,这可能是我的最后手段。我不知道该在编码中做什么。你的回答肯定会有很大帮助。非常感谢!

{
"Students" : {
"-Ma9R58DvoFMkLqukMmk" : {
"fullname" : "Juan Capistrano Dela Cruz",
"studId" : "18-ln-0001"
},
"-Ma9TttvUqShhYjD-q_5" : {
"fullname" : "Maria Acosta Gomez",
"studId" : "18-ln-0002"
},
"-Ma9Ub__33IsWEFDbitu" : {
"fullname" : "David Orosco Villar",
"studId" : "18-ln-0003"
},
"-Ma9ZI_FvEgutnSvsSrU" : {
"fullname" : "Ara Quizon Diaz",
"studId" : "18-ln-0006"
},
"-MaBPU-fsEInFUGWft_n" : {
"surName" : "Diaz"
}
}
}
DatabaseReference databaseReference = 
FirebaseDatabase.getInstance().getReference();
String userId = databaseReference.child("Students").push().getKey();
String surname = snameInput.getText().toString();
HashMap hashMap = new HashMap();
hashMap.put("surName", surname);

databaseReference.child("Students").child(userId).setValue(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(PersonalData.this, "Surname updated", Toast.LENGTH_SHORT).show();
}
});

如果您知道要更新的节点的学生ID,那么您可以采取两步过程:

  1. 使用查询查找具有该学生ID的节点
  2. 更新该节点

在代码中应该是:

Query query = databaseReference.child("Students").orderByChild("studId").equalTo("18-ln-0002");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot resultSnapshot) {
for (DataSnapshot studentSnapshot: resultSnapshot.getChildren()) {
studentSnapshot.getRef().child("surname").setValue("Cortez");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}

一般来说,如果您的学生ID已经是唯一的,那么使用这些作为Students下节点的密钥更有意义。所以在这种情况下,你会添加一个学生:

HashMap hashMap = new HashMap();
hashMap.put("fullname", "Maria Acosta Gomez");
databaseReference.child("Students").child("18-ln-0002").setValue(hashMap);

然后更新它们将非常简单:

databaseReference.child("Students").child("18-ln-0002").child("surname").setValue("Cortez");

或者如果你想使用hashmap:

HashMap hashMap = new HashMap();
hashMap.put("surName", snameInput.getText().toString());
databaseReference.child("Students").child("18-ln-0002").updateChildren(hashMap);

最新更新