Firebase - 为注册用户生成带有孩子的孩子

Rob*_*Pal 5 java android firebase firebase-authentication firebase-realtime-database

当用户注册到我的应用程序时,我想在 Firebase 中添加多个数据,包括一个带有一些孩子的节点“Scores”,但我不知道如何添加它。

Firebase 数据库:

"Users" : {
   "L89LA3099j-VAhi5Y5P" : {
      "Admin" : false,
      "Email" : "example@domain.com",
      "Nickname" : "Anonymous",
      "Picture" : "https://firebasestorage.googleapis.com/v0/b/cul...",
      "Scores" : {
         "Arts" : 0,
         "Classical music" : 0,
         "Literature" : 0
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

这是 Android Studio 中的代码:

 FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password).addOnCompleteListener(UserRegistration.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    if (!task.isSuccessful()) {
                        Toast.makeText(UserRegistration.this, "Invalid email or already existed email!", Toast.LENGTH_SHORT).show();
                    } else {
                        DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference().child("Users");
                        HashMap<String, Object> user_data = new HashMap<>();
                        user_data.put("Admin", false);
                        user_data.put("Email", email); // I got it correctly from EditText
                        user_data.put("Picture", "https://firebasestorage.googleapis.com/v0/b/cul...");
                        user_data.put("Nickname", "Anonymous");
                        usersRef.child("Users").push().setValue(user_data);

                        DatabaseReference scores_ref = usersRef.child("Scores"); // I guess it's wrong to do it like this
                        HashMap<String, Integer> user_scores = new HashMap<>();
                        user_scores.put("Arts", 0);
                        user_scores.put("Classical music", 0);
                        user_scores.put("Literature", 0);

                        // and now how to add Scores node inside the created user?
Run Code Online (Sandbox Code Playgroud)

Pet*_*dad 4

如果您想添加Scores到用户下,请尝试以下操作:

首先使用 userid 而不是push()

FirebaseUser mCurrentUser= task.getResult().getUser();
String userid=mCurrentUser.getUid();
Run Code Online (Sandbox Code Playgroud)

然后改变这个:

usersRef.child("Users").push().setValue(user_data);
Run Code Online (Sandbox Code Playgroud)

对此:

usersRef.child(userid).setValue(user_data);
DatabaseReference scores_ref =usersRef.child(userid).child("Scores"); 
scores_ref.child("Arts").setValue(0);
scores_ref.child("Classical music").setValue(0);
scores_ref.child("Literature").setValue(0);
Run Code Online (Sandbox Code Playgroud)

userRef指向孩子Users

这条线usersRef.child(userid).setValue(user_data);

将创建以下内容:

Users
  userid
     Admin : false
     Email : example@domain.com
     Nickname" : Anonymous
     Picture" : https://firebasestorage.googleapis.com/v0/b/cul...
Run Code Online (Sandbox Code Playgroud)

然后这一行DatabaseReference scores_ref =usersRef.child(userid).child("Scores");

将通过节点Users,然后节点userid,它将添加子节点Scores及其子节点。一切都将在当前userid.