Этот урок описывает создание окна регистрации и добавление пользователя в базу данных Firebase.
Подготовка MainActivity
В файле MainActivity создадим переменные для ссылок на кнопки «Войти» и «Зарегистрироваться». Убедитесь, что в XML-разметке android:id кнопки «Зарегистрироваться» имеет корректное значение, например, btn_register.
Добавим следующий код:
Button btn_signIn = findViewById(R.id.btn_signIn);
Button btn_register = findViewById(R.id.btn_register);
Эти переменные будут содержать ссылки на соответствующие кнопки.
Подключение к Firebase
Подключим базу данных Firebase:
FirebaseApp firebaseApp = FirebaseApp.getInstance();
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference users = db.getReference("users");
firebaseApp инициализирует Firebase, db устанавливает соединение с базой данных, а users — это ссылка на таблицу «users». Методы getInstance() инициализируют Firebase и подключаются к базе данных.
Обработчик события для кнопки «Зарегистрироваться»
Создадим обработчик события для кнопки «Зарегистрироваться»:
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showRegisterWindow();
}
});
Этот код вызовет функцию showRegisterWindow(), которая описана ниже.
Всплывающее окно регистрации (showRegisterWindow())
Функция showRegisterWindow() создаёт всплывающее окно регистрации с помощью AlertDialog.Builder:
private void showRegisterWindow() {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("Зарегистрироваться");
dialog.setMessage("Введите данные для регистрации");
LayoutInflater inflater = LayoutInflater.from(this);
View registerWindow = inflater.inflate(R.layout.register_window, null);
dialog.setView(registerWindow);
// Получение данных из полей ввода
final MaterialEditText email = registerWindow.findViewById(R.id.email_field);
final MaterialEditText password = registerWindow.findViewById(R.id.password_field);
final MaterialEditText name = registerWindow.findViewById(R.id.name_field);
final MaterialEditText phone = registerWindow.findViewById(R.id.phone_field);
dialog.setNegativeButton("Отменить", (dialogInterface, i) -> dialogInterface.dismiss());
dialog.setPositiveButton("Добавить", (dialogInterface, i) -> {
//Обработка данных и регистрация пользователя
});
dialog.show();
}
register_window.xml — это layout-файл, содержащий поля ввода для email, пароля, имени и телефона.
Валидация данных
Добавим валидацию данных перед регистрацией:
final String emailText = email.getText().toString();
final String passwordText = password.getText().toString();
final String nameText = name.getText().toString();
final String phoneText = phone.getText().toString();
if (TextUtils.isEmpty(emailText)) {
Snackbar.make(root, "Введите вашу почту", Snackbar.LENGTH_LONG).show();
return;
}
// Аналогичная проверка для password, name, phone
if (passwordText.length() < 5) {
Snackbar.make(root, "Пароль должен быть длиннее 5 символов", Snackbar.LENGTH_LONG).show();
return;
}
// ... (проверка для name и phone) ...
// Регистрация пользователя (после успешной валидации)
root — это View (например, RelativeLayout), которому задан android_id="@+id/root" в activity_main.xml.
Регистрация пользователя в Firebase
После валидации данных, регистрируем пользователя:
firebaseApp.createUserWithEmailAndPassword(emailText, passwordText)
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
//Создание объекта User и сохранение в базу данных
User user = new User(nameText, emailText, passwordText, phoneText);
users.child(emailText).setValue(user)
.addOnSuccessListener(aVoid -> {
Snackbar.make(root, "Пользователь добавлен!", Snackbar.LENGTH_SHORT).show();
dialogInterface.dismiss();
});
}
//Обработка ошибок
});
Класс User должен быть определен отдельно и содержать поля name, email, password, phone.
В этом уроке мы реализовали функционал регистрации пользователя, включая создание всплывающего окна, валидацию данных и добавление пользователя в базу данных Firebase. Настройка и тестирование Firebase будут рассмотрены в следующих уроках.