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) {
}
});
请看我的编辑。我用这种方式检查用户名。如果我按照你的建议更改密码,那么如何检查重复的用户名?@FarhadUID
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) {
}
});