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

标签 java android firebase-realtime-database

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

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

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/

相关文章:

javascript - Google Firebase 我想控制台记录我的 firebase 数据

java - Tomcat6 和JRE7 兼容性问题。不支持的 major.minor 版本 51.0

java - 如何将nestedscrollview动画设置到底部

android - 使用 adMob 无法在 Android 上展示广告

java - 为 Android 应用程序登录 "Java Library Code"库

javascript - 将日期插入 firebase 数据库中的新条目

android - 用户存在和身份验证

java - Solr POST 请求返回 400。Java。当请求的大小太大时

Java - 对于给定函数 foo(X i);在接口(interface)X中,为什么不能实现类Y将其更改为foo(Y i)?

java - 如何在 JFreeChart 中将时间以这种格式 00 :00:00. 000 分配给 X 轴