繁体   English   中英

在 Android Studio 中检查电子邮件和用户名的可用性(Firebase)

[英]checking the email and username availability(Firebase) in Android Studio

我正在尝试借助 Android Studio 中的 Firebase 实时数据库构建一个注册系统。 到目前为止,注册不需要唯一的用户名和电子邮件。 这就是我验证用户输入的方式。

 private Boolean validateUsername() {
       String val = regUsername.getEditText().getText().toString();
        String noWhiteSpace = "\\A\\w{4,20}\\z";
                if (val.isEmpty()) {
                    regUsername.setError("Field cannot be empty");
                    return false;
                }
                 else if (val.length() >= 15) {
                    regUsername.setError("Username too long");
                    return false;
                } else if (!val.matches(noWhiteSpace)) {
                    regUsername.setError("Spaces are not allowed");
                    return false;
                } else {
                    regUsername.setError(null);
                    regUsername.setErrorEnabled(false);
                    return true;
                }
   }
    private Boolean validateEmail() {
        String val = regEmail.getEditText().getText().toString();
        String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
        if (val.isEmpty()) {
            regEmail.setError("Field cannot be empty");
            return false;
        } else if (!val.matches(emailPattern)) {
            regEmail.setError("Invalid email address");
            return false;
        } else {
            regEmail.setError(null);
            regEmail.setErrorEnabled(false);
            return true;
        }
    }

如图所示,我为此使用了布尔函数,当单击注册按钮时,将执行以下代码。

  public void registerUser(View view) {
        //Performing Validation by calling validation functions
        if (!validateName() | !validatePassword() | !ConfirmPassword() | !validateEmail() | !validateUsername()) {
            return;
        }
        rootNode = FirebaseDatabase.getInstance();
        reference = rootNode.getReference("users");
        String name = regName.getEditText().getText().toString();
        String username = regUsername.getEditText().getText().toString();
        String email = regEmail.getEditText().getText().toString();
        String password = regPassword.getEditText().getText().toString();
        UserHelperClass helperClass = new UserHelperClass(name, username, email, password);
        reference.child(username).setValue(helperClass);
        Intent intent = new Intent(SignUp.this, UserProfile.class);
        startActivity(intent);
    }

我在互联网上搜索了如何检查用户名和电子邮件是否已经存在,我找到了这个方法。

 DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("users").child("username").addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
     if(dataSnapshot.exists()){
      // use "username" already exists
    } else {
      // "username" does not exist yet.
    }                               
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {

  }
}); 

问题是该函数是无效的,我希望它是布尔值,所以我可以将它添加为 validateUsername() 和 validateEmail() 中的条件。 我怎样才能做到这一点?

如果您检查用户名唯一性的代码有效,那么类似这样的事情可能会起作用。

void trySignUp(String username) {

    boolean isUsernameValid = validateUsername(username);
    if (isUsernameValid) {
        continueIfUsernameIsUnique(username);
    }
}

以下是方法,

boolean validateUsername (String username) {
    
    if (username.length == 0) {
        showError("Username can't be empty");
        return false;
    }

    return true;
}

void continueIfUsernameIsUnique(String username) {
    
    ref.child("users")
         .child(username)
         .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                showError("Username already exists.");
            } else {
                continueUserSignUp(username);
            }                               
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            showError("Something went wrong, please try again.");
        }
    });
}


void continueUserSignUp(String username) {
    // signup with this username
}

您可以使用 Firebase Auth 对用户进行身份验证,如果用户(电子邮件)已存在于数据库中,它将生成电子邮件已存在的吐司。 你可以在这里看到

FirebaseAuth mAuth = FirebaseAuth.getInstance();
Signup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           
            String mEmail = Email.getText().toString();
            String mPassword = Password.getText().toString();
            String mRepass = Repass.getText().toString();

            if (!TextUtils.isEmpty(mEmail) && !TextUtils.isEmpty(mPassword) && !TextUtils.isEmpty(mRepass)){
                if (mPassword.equals(mRepass)){
                    mAuth.createUserWithEmailAndPassword(mEmail,mPassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()){
                               
                                startActivity(new Intent(Signup.this, MainActivity.class));
                                finish();
                            }else {
                               
                                Toast.makeText(Signup.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                }else{
                    
                    Toast.makeText(Signup.this,"Password not match",Toast.LENGTH_SHORT).show();
                }
            }else{
                
                if (TextUtils.isEmpty(mEmail)) {
                    Email.setError("Email-ID is required!");
                    Email.setHint("Please enter Email-ID");
                }
                if (TextUtils.isEmpty(mPassword)) {
                    Password.setError("Password is required!");
                    Password.setHint("Please enter Password");
                }
                if (TextUtils.isEmpty(mRepass)) {
                    Repass.setError("Password is required!");
                    Repass.setHint("Please enter Re-Password");
                }
            }
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM