У меня следующий вариант использования: пользователь заходит на регистрационную форму, вводит имя, адрес электронной почты и пароль и нажимает кнопку регистрации.После этого система должна проверить, принято ли электронное письмо или нет, и на основании этого сообщения об ошибке показа или создать нового пользователя ...
Я пытаюсь сделать это, используя Room, ViewModel и LiveData.Это какой-то проект, на котором я пытаюсь изучить эти компоненты, и у меня нет удаленного API, я буду хранить все в локальной базе данных
Итак, у меня есть эти классы:
- RegisterActivity
- RegisterViewModel
- Пользователь
- UsersDAO
- UsersRepository
- UsersRegistrationService
Так что идея, которую я имеюзаключается в том, что к кнопке регистрации будет присоединен слушатель, который будет вызывать метод RegisterViewModel::register()
.
class RegisterViewModel extends ViewModel {
//...
public void register() {
validationErrorMessage.setValue(null);
if(!validateInput())
return;
registrationService.performRegistration(name.get(), email.get(), password.get());
}
//...
}
Так что это основная идея, я также хочу, чтобы performRegistration
вернул мне вновь созданного пользователя.
Больше всего меня беспокоит то, что я не знаю, как реализовать performRegistration
функцию в сервисе
class UsersRegistrationService {
private UsersRepository usersRepo;
//...
public LiveData<RegistrationResponse<Parent>> performRegistration(String name, String email, String password) {
// 1. check if email exists using repository
// 2. if user exists return RegistrationResponse.error("Email is taken")
// 3. if user does not exists create new user and return RegistrationResponse(newUser)
}
}
Как я понимаю, методы, которые в UsersRepository
должны возвращать LiveDataпотому что UsersDAO
возвращает LiveData
@Dao
abstract class UsersDAO {
@Query("SELECT * FROM users WHERE email = :email LIMIT 1")
abstract LiveData<User> getUserByEmail(String email);
}
class UsersRepository {
//...
public LiveData<User> findUserByEmail(String email) {
return this.usersDAO.getUserByEmail(email);
}
}
Поэтому моя проблема заключается в том, как реализовать функцию performRegistration()
и как передать значение обратно для просмотра модели, а затем как изменить активность с RegisterActivity на MainActivity ...