![](/img/trans.png)
[英]advice on checking username availability in an edittext in android
[英]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.