检查用户是否存在于Firebase数据库中
问题描述:
我想用addListenerForSingleValueEvent方法在数据库中检查它,但是当我调试代码时,侦听器被跳过,这是我的侦听器代码。检查用户是否存在于Firebase数据库中
mTheReference = FirebaseDatabase.getInstance().getReference();
mUsersReference = mTheReference.child("Users");
mUsersReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
User post = postSnapshot.getValue(User.class);
String username = post.getUsername();
if (username.equals(mUserView.getText().toString())) {
alreadyRegisteredAccount++;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
if (alreadyRegisteredAccount != 0) {
mUserView.setError("Usuario ya registrado, intenta de nuevo.");
} else {
User user = new User();
user.setUsername(mUserView.getText().toString());
user.setPassword(mPasswordView.getText().toString());
mUsersReference.push().setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(getApplicationContext(), "YAAAY!", Toast.LENGTH_LONG).show();
}
});
}
我不知道为什么它的跳跃,我需要的东西,让一旦用户尝试注册一个新的username.This是数据树我检查用户是否存在:
{
users:
{
-KjGdQAZEfJ-qR5pM0Ko:
{
username : fmigg
password : broxton1
}
-KjGq7AghI9ftiX6Ih-q:
{
username : aston
password : creative123
}
}
}
答
您的DatabaseReference
是错误的。请改变这一行:
mUsersReference = mTheReference.child("Users");
与
mUsersReference = mTheReference.child("Users").child(userId);
在其userId
是由push()
方法生成的唯一的ID。
希望它有帮助。
虽然OP应该在树中听低一些,但这不是代码中问题的原因。它附加了一个值监听器并循环了这些孩子。虽然浪费,它会起作用。 –