Как проверить форму входа в Room Kotlin?

Я новичок в 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?

}

введите описание изображения здесь

0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
fun getUserEmail(email: String) {
    viewModelScope.launch(Dispatchers.IO) {
        repository.getUserEmail(email)
    }
}

этот метод не имеет возврата, указанного в сигнатуре, а также фактического оператора возврата, он просто делает то, что вы ему говорите, а это означает, что результатом вызова этой функции будет присвоение Unit к emailList. Unit равно нулю? нет. вот почему ваш if всегда будет терпеть неудачу. чтобы написать функцию, которая что-то возвращает, вы должны указать тип возвращаемого значения в сигнатуре вашей функции, однако, поскольку вы используете асинхронные операции, тип возвращаемого значения не обязательно является тем, что вам нужно. Подумайте о том, чтобы взглянуть на что-то вроде liveData или узнать больше об асинхронных операциях здесь.

Большое спасибо! Я избавился от «Если недопонимание», но мое приложение начало падать после того, как я внес некоторые исправления. Я добавил изображение моего кода

EJ Travel 04.05.2022 19:46

если ваше приложение дает сбой, лучше всего задать новый вопрос и предоставить там все подробности, поэтому включите свой код и трассировку стека, и люди помогут вам

a_local_nobody 05.05.2022 10:43

Другие вопросы по теме