Я новичок в Kotlin, я не могу управлять проверкой формы входа. Моя идея состоит в том, чтобы сравнить inputEmail с электронной почтой, существующей в базе данных. Модуль Если возвращает только истинный
класс LoginViewModel (приложение: Приложение): AndroidViewModel (приложение) {
private val repository: UserRepository
init {
val userDao = AppDatabase.getInstance(application).userDao()
repository = UserRepository(userDao)
}
fun getUserEmail(email: String) {
viewModelScope.launch(Dispatchers.IO) {
repository.getUserEmail(email)
}
}
}
функция внутри LoginFragment:
private fun logIn() {
val email = binding.editEmailAddress.text.toString()
val password = binding.editPassword.text.toString()
if (inputCheck(email, password)) {
mLoginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
val emailList = mLoginViewModel.getUserEmail(email)
if (emailList!=null)
Toast.makeText(requireContext(), "Logged in as $email", Toast.LENGTH_LONG).show()
findNavController().navigate(R.id.action_loginFragment_to_listFragment)
} else {
Toast.makeText(requireContext(), "Fill out blank fields", Toast.LENGTH_LONG).show()
}
}
ПользовательДао:
@Dao
интерфейс UserDao { @Вставлять приостановить веселье addUserToDatabase (пользователь: пользователь)
@Query("SELECT * FROM user_table ORDER BY userId DESC")
fun getAllUsers(): LiveData<List<User>>
@Query("SELECT * FROM user_table WHERE E_mail LIKE :email")
suspend fun getUserEmail(email: String): User?
}
fun getUserEmail(email: String) {
viewModelScope.launch(Dispatchers.IO) {
repository.getUserEmail(email)
}
}
этот метод не имеет возврата, указанного в сигнатуре, а также фактического оператора возврата, он просто делает то, что вы ему говорите, а это означает, что результатом вызова этой функции будет присвоение Unit
к emailList
. Unit
равно нулю? нет. вот почему ваш if всегда будет терпеть неудачу. чтобы написать функцию, которая что-то возвращает, вы должны указать тип возвращаемого значения в сигнатуре вашей функции, однако, поскольку вы используете асинхронные операции, тип возвращаемого значения не обязательно является тем, что вам нужно. Подумайте о том, чтобы взглянуть на что-то вроде liveData или узнать больше об асинхронных операциях здесь.
если ваше приложение дает сбой, лучше всего задать новый вопрос и предоставить там все подробности, поэтому включите свой код и трассировку стека, и люди помогут вам
Большое спасибо! Я избавился от «Если недопонимание», но мое приложение начало падать после того, как я внес некоторые исправления. Я добавил изображение моего кода