![](/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.