gpt4 book ai didi

java - Android Firebase 数据库检查用户名是否已被使用

转载 作者:行者123 更新时间:2023-12-01 16:59:58 26 4
gpt4 key购买 nike

你好,我正在寻找一种方法来检查用户名是否已在使用中。

问题是,如果用户名已被使用,错误会正确显示,但用户仍然注册......

private boolean validateForm () {
boolean valid = true;

String username = rUsernameField.getText().toString();
String email = rEmailField.getText().toString();
if (TextUtils.isEmpty(email)) {
rEmailField.setError(getText(R.string.field_error));
valid = false;
} else {
rEmailField.setError(null);
}

String password = rPasswordField.getText().toString();
if (TextUtils.isEmpty(password)) {
rPasswordField.setError(getText(R.string.field_error));
valid = false;
} else {
rPasswordField.setError(null);
}

if (TextUtils.isEmpty(username)) {
rUsernameField.setError(getText(R.string.field_error));
valid = false;
validUsername = false;
} else {
rUsernameField.setError(null);
}
if (!validUsername) {
valid = false;
}
if (rCGUCheck.isChecked()) {
rCGUCheck.setError(null);
} else {
rCGUCheck.setError(getText(R.string.err_cgu));
valid = false;
}

return valid;
}

public void setValidUsername() {
String username = rUsernameField.getText().toString();
FirebaseDatabase.getInstance().getReference().child("users").orderByChild("username").equalTo(username).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
validUsername = false;
Log.d(TAG, "false");
rUsernameField.setError("This username already exists");
} else {
validUsername = true;
Log.d(TAG, "true");
}

}

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

}
});

}

private void signUp() {
Log.d(TAG, "signUp");
if (!validateForm()) {
return;
}


@Override
public void onClick (View v){
int i = v.getId();
if (i == R.id.regBtn) {
setValidUsername();
signUp();
}

因此,如果其中一个字段未填写,用户将无法注册。但我不明白的是为什么即使用户名已经存在用户仍然可以注册^^

提前致谢。

最佳答案

有一个名为 validateUser 的函数:

public void validateUser() {

//get string from editTexts
String username = rUsernameField.getText().toString();
String email = rEmailField.getText().toString();
String password = rPasswordField.getText().toString();

FirebaseDatabase.getInstance().getReference().child("users").orderByChild("username").equalTo(username).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//username is not available

rUsernameField.setError("This username already exists");

} else {
//username is available


//so check now if all is okay
if(!TextUtils.isEmpty(email) && !TextUtils.isEmpty(password) && !TextUtils.isEmpty(username) && rCGUCheck.isChecked()){

signUp();
}
}

}

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

}
});

}

signUp() 方法:

private void signUp(){
//sign up
Log.d(TAG, "signUp");
}

onclick()方法

@Override
public void onClick (View v){
int i = v.getId();
if (i == R.id.regBtn) {

validateUser();

}

关于java - Android Firebase 数据库检查用户名是否已被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61523624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com