我想在唯一的密钥中包含姓氏以及全名和学生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,那么您可以采取两步过程:
- 使用查询查找具有该学生ID的节点
- 更新该节点
在代码中应该是:
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);