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

如何在firebase realtime android中的唯一密钥中添加额外的子节点?,android,firebase,firebase-realtime-database,insert,Android,Firebase,Firebase Realtime Database,Insert,我想把姓氏连同全名和学生证一起放在唯一的钥匙里。我被卡住了,这可能是我最后的选择。我不知道在编码中该怎么做。你的回答肯定会大有帮助。非常感谢你 { "Students" : { "-Ma9R58DvoFMkLqukMmk" : { "fullname" : "Juan Capistrano Dela Cruz", "studId" : "18-l

我想把姓氏连同全名和学生证一起放在唯一的钥匙里。我被卡住了,这可能是我最后的选择。我不知道在编码中该怎么做。你的回答肯定会大有帮助。非常感谢你

 {

  "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数据库引用=
FirebaseDatabase.getInstance().getReference();
字符串userId=databaseReference.child(“学生”).push().getKey();
字符串姓氏=snameInput.getText().toString();
HashMap HashMap=新的HashMap();
hashMap.put(“姓氏”,姓氏);
databaseReference.child(“学生”).child(userId).setValue(hashMap).addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
Toast.makeText(PersonalData.this,“姓氏更新”,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已经是唯一的,那么使用这些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);
    

    您能否编辑您的问题以显示:1)数据库中的数据结构(如JSON文本,请不要截图)。您可以通过单击溢出菜单中的“导出JSON”链接来实现这一点(⠇) 关于您的。2)您已经尝试过的代码,或者您尝试添加此属性的上下文。我希望您能帮助我,先生,谢谢。我尝试过您的解决方案,但它没有解决我的问题。我的代码流程是,您可以添加新学生的编号和全名。新生名单会显示出来。之后,如果单击一个列表,下一个窗口将添加用户的其他信息。这就是为什么我需要添加姓氏,但它不能转到相同的唯一键。请编辑您的问题以显示您对我共享的代码所做的操作。我建议你阅读,学习如何使它成为我们最可能的帮助。嘿@LeonicaCortez。这里有进一步的更新吗?
    HashMap hashMap = new HashMap();
    hashMap.put("surName", snameInput.getText().toString());
    
    databaseReference.child("Students").child("18-ln-0002").updateChildren(hashMap);