Java 无法从Firebase数据库获取用户名

Java 无法从Firebase数据库获取用户名,java,android,Java,Android,我的应用程序正在根据以下代码发送用户名 mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) {

我的应用程序正在根据以下代码发送用户名

  mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new 
  OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()){


                        currentUserUid=mAuth.getCurrentUser().getUid();
                        FirebaseDatabase database = FirebaseDatabase.getInstance();
                        DatabaseReference myRef = database.getReference("MyUserList");
                        
  myRef.child(usernameInput).child(currentUserUid).child("username").setValue(usernameInput);

                        sendUserToLoginActivity();
                        Toast.makeText(RegisterActivity.this, "Account Created Successfully", 
  Toast.LENGTH_SHORT).show();
                        loadingBar.dismiss();

                    }
我正在用下面的代码验证重复的用户名

  private  void DuplicateUserName(){
        final DatabaseReference rootRef = 
 FirebaseDatabase.getInstance().getReference();
        DatabaseReference userNameRef = 
 rootRef.child("MyUserList").child(usernameInput);
        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if(!dataSnapshot.exists()) {
                    //create new user
                    //Toast.makeText(RegisterActivity.this, "success", 
 Toast.LENGTH_SHORT).show();
                   /* FirebaseDatabase database = 
 FirebaseDatabase.getInstance();
                    DatabaseReference myRef = 
 database.getReference("MyUserList");
                    
 myRef.child(usernameInput).child("username").setValue(usernameInput);

                    */
                    CreateNewAccount();


                }
                else {
                    UserName.setError("This username already taken");
                    UserName.requestFocus();
                    loadingBar.dismiss();
                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(RegisterActivity.this, 
databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        };
        userNameRef.addListenerForSingleValueEvent(eventListener);
    }

用户名已上载到
“MyUserList”/usernameInput/currentUserUid/“Username”

但是您正在获取
“MyUserList”/currentUserUid/“username”

因此,请尝试以下方法进行上传:

myRef.child(“MyUserList”).child(currentUserUid).child(“用户名”).setValue(usernameInput)

希望这有帮助。请随时要求澄清

编辑:在@Farhad的怀疑之后编辑

DatabaseReference reference = database.getReference("MyUserList");

        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
                  
                    //TODO: Here are your UserNames

                    }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });

请看我的编辑。我用这种方式检查用户名。如果我按照你的建议更改密码,那么如何检查重复的用户名?@Farhad
UID
s不要重复。但是
Name
可以重复。检查重复的
用户名
需要什么?我需要在列表视图中显示每个用户的考试分数。这就是为什么我需要用户名是唯一的。@Farhad然后,从
“MyUserList”/
中获取所有子值,并检查是否有重复。请在这里写一行如何开始?更好的理解方法是删除for循环并尝试使用此名称=“”+snapshot.child(“用户名”).getValue();结果相同brother.savingScoreModel scoreModel=新的savingScoreModel(分数、名称);这需要在onDataChangeThis以及myRef.child(key.setValue(scoreModel)中;是的,它正在工作。谢谢兄弟。
DatabaseReference reference = database.getReference("MyUserList");

        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
                  
                    //TODO: Here are your UserNames

                    }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });