Зарегистрируйте пользователя Firebase с помощью электронной почты и пароля [НЕ РАБОТАЕТ] Не происходит переход на страниAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Зарегистрируйте пользователя Firebase с помощью электронной почты и пароля [НЕ РАБОТАЕТ] Не происходит переход на страни

Сообщение Anonymous »

Ну, я помещаю пользователя в базу данных Firebase, но, похоже, он не открывает активность входа в систему после нажатия кнопки «Зарегистрироваться». Он бесконечно показывает индикатор выполнения...
Вот весь блок кода RegisterActivity.java

Код: Выделить всё

package com.example.goalhero;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.DatePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Patterns;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;
import com.google.firebase.auth.FirebaseAuthUserCollisionException;
import com.google.firebase.auth.FirebaseAuthWeakPasswordException;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegisterActivity extends AppCompatActivity {

EditText etRegFullname, etRegEmail, etRegDob, etRegMobile, etRegPwd, etRegConfirmPwd;
ProgressBar progressBar;
RadioGroup rgRegGender;
RadioButton rbRegGenderSelected;
DatePickerDialog picker;

private static final String TAG = "RegisterActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);

setSupportActionBar(findViewById(R.id.toolbar));

Toast.makeText(RegisterActivity.this, "You may register now.", Toast.LENGTH_LONG).show();

progressBar = findViewById(R.id.progress_bar);

etRegPwd = findViewById(R.id.et_register_password);
etRegConfirmPwd = findViewById(R.id.et_confirm_password);

etRegFullname = findViewById(R.id.et_register_fullname);
etRegEmail = findViewById(R.id.et_register_email);
etRegDob = findViewById(R.id.et_register_dob);
etRegMobile = findViewById(R.id.et_register_mobile);

rgRegGender = findViewById(R.id.radio_group_register_gender);
rgRegGender.clearCheck();

// Setting up the date picker
etRegDob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);

// Date picker dialog
picker = new DatePickerDialog(RegisterActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
etRegDob.setText(day + "/" + (month + 1) + "/" + year);
Log.d(TAG, "Date of Birth selected: "  + etRegDob.getText().toString());
}
}, year, month, day);
picker.show();
}
});

Button registerBtn = findViewById(R.id.registerBtn);

registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

int selectedGenderId = rgRegGender.getCheckedRadioButtonId();
rbRegGenderSelected = findViewById(selectedGenderId);

// Obtain the entered data
String txtFullname = etRegFullname.getText().toString();
String txtEmail = etRegEmail.getText().toString();
String txtDob = etRegDob.getText().toString();
String txtMobile = etRegMobile.getText().toString();
String txtPwd = etRegPwd.getText().toString();
String txtConfirmPwd = etRegConfirmPwd.getText().toString();
String txtGender;

Log.d(TAG, "Register button clicked with details - Fullname: " + txtFullname + ", Email: " + txtEmail + ", DOB: " + txtDob + ", Mobile: " + txtMobile + ", Password: " + txtPwd + ", Confirm Password: " + txtConfirmPwd);

// Validate the mobile number using matcher and pattern (regular express)
String mobileRegex = "^(\\+\\d{1,2}\\s?)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$";
Matcher mobileMatcher;
Pattern mobilePattern = Pattern.compile(mobileRegex);
mobileMatcher = mobilePattern.matcher(txtMobile);

if (TextUtils.isEmpty(txtFullname)) {
showError(etRegFullname, "Please enter your full name.", "Full name is required.");
} else if (TextUtils.isEmpty(txtEmail)) {
showError(etRegEmail, "Please enter a valid email.", "Email is required.");
} else if (!Patterns.EMAIL_ADDRESS.matcher(txtEmail).matches()) {
showError(etRegEmail, "Please re-enter your email.", "Valid email address required.");
} else if (TextUtils.isEmpty(txtDob)) {
showError(etRegDob, "Please enter your DOB.", "DOB required.");
} else if (rgRegGender.getCheckedRadioButtonId() == -1) {
showError(rbRegGenderSelected, "Please select your gender.", "Gender selection required.");
} else if (TextUtils.isEmpty(txtMobile)) {
showError(etRegMobile, "Please enter your 10-digit mobile number.", "Phone number isn't valid.");
} else if (txtMobile.length() != 10) {
showError(etRegMobile, "Phone number must be 10-digits", "Phone number isn't 10-digits.");
} else if (!mobileMatcher.find()) {
showError(etRegMobile, "This is not a valid phone number.", null);
} else if (TextUtils.isEmpty(txtPwd)) {
showError(etRegPwd, "You must enter a password.", "No password entered.");
} else if (txtPwd.length() < 6) {
showError(etRegPwd, "Password too short.", "Password too short.");
} else if (TextUtils.isEmpty(txtConfirmPwd)) {
showError(etRegConfirmPwd, "Please confirm your password.", "Password confirmation is required.");
} else if (!txtPwd.equals(txtConfirmPwd)) {
showError(etRegConfirmPwd, "Passwords must match.", "Passwords don't match.");
etRegConfirmPwd.clearComposingText();
etRegPwd.clearComposingText();
} else {
txtGender = rbRegGenderSelected.getText().toString();
progressBar.setVisibility(View.VISIBLE);
registerUser(txtFullname, txtEmail, txtDob, txtGender, txtMobile, txtPwd);
}
}
});
}

private void showError(View view, String toastMessage, String errorMessage) {
Toast.makeText(RegisterActivity.this, toastMessage, Toast.LENGTH_SHORT).show();
Log.e(TAG, "Error: " + toastMessage + " - "  + errorMessage);
if (view instanceof EditText) {
((EditText) view).setError(errorMessage);
view.requestFocus();
} else if (view instanceof RadioButton) {
((RadioButton) view).setError(errorMessage);
view.requestFocus();
}
}

private void registerUser(String txtFullname, String txtEmail, String txtDob, String txtGender, String txtMobile, String txtPwd) {
FirebaseAuth auth = FirebaseAuth.getInstance();

auth.createUserWithEmailAndPassword(txtEmail, txtPwd)
.addOnCompleteListener(this, new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
FirebaseUser firebaseUser = task.getResult().getUser();
Log.d(TAG, "User registered successfully with UID: " + firebaseUser.getUid());
updateUserProfile(firebaseUser, txtFullname);
writeUserDataToDatabase(firebaseUser, new ReadWriteUserDetails(txtDob, txtGender, txtMobile));
} else {
handleRegistrationError(task.getException());
}
progressBar.setVisibility(View.GONE);
}
});
}

private void updateUserProfile(FirebaseUser user, String displayName) {
user.updateProfile(new UserProfileChangeRequest.Builder()
.setDisplayName(displayName)
.build())
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated.");
} else {
Log.e(TAG, "Failed to update user profile.");
Toast.makeText(RegisterActivity.this, "Failed to update user profile.", Toast.LENGTH_SHORT).show();
}
}
});
}

private void writeUserDataToDatabase(FirebaseUser user, ReadWriteUserDetails userData) {
DatabaseReference referenceProfile = FirebaseDatabase.getInstance().getReference("Registered Users");
referenceProfile.child(user.getUid()).setValue(userData)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Log.d(TAG, "User data written to database.");
sendVerificationEmail(user);
} else {
Log.e(TAG, "Failed to save user data.");
Toast.makeText(RegisterActivity.this, "Failed to save user data.", Toast.LENGTH_SHORT).show();
}
}
});
}

private void sendVerificationEmail(FirebaseUser user) {
user.sendEmailVerification()
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Log.d(TAG, "Verification email sent.");
Toast.makeText(RegisterActivity.this, "User registered successfully.  Please verify your email.", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
} else {
Log.e(TAG, "Failed to send verification email.");
Toast.makeText(RegisterActivity.this, "Failed to send verification email.", Toast.LENGTH_SHORT).show();
}
}
});
}

private void handleRegistrationError(Exception e) {
String message;
if (e instanceof FirebaseAuthWeakPasswordException) {
message = "Password must contain 6 or more characters. Letters, numbers, and special character required";
} else if (e instanceof FirebaseAuthInvalidCredentialsException) {
message = "Your email is invalid or already in use.";
} else if (e instanceof FirebaseAuthUserCollisionException) {
message = "User is already registered.";
} else {
message = e.getMessage();
}
Log.e(TAG, "Registration error: " + message, e);
Toast.makeText(RegisterActivity.this, message, Toast.LENGTH_SHORT).show();
}
}

Это выходные данные кода.
RegisterActivity com.example.goalhero D Выбрана дата рождения: 06.06.2024
RegisterActivity com.example.goalhero D Нажата кнопка «Зарегистрироваться» с подробной информацией — полное имя: K, адрес электронной почты: Kevinalexolson@gmail.com, дата рождения: 06.06.2024, мобильный телефон: 2042322553, пароль: *******, подтверждение пароля: *******
RegisterActivity com.example.goalhero D Пользователь успешно зарегистрировался с UID: T49FfhdctwOcevRDuA94K0IDw8t2
RegisterActivity com.example.goalhero D Профиль пользователя обновлен.

Подробнее здесь: https://stackoverflow.com/questions/785 ... nuing-onto
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»