如何使用 Room Kotlin 验证登录表单?

How to validate login form with Room Kotlin?

我是 Kotlin 的新手,我无法管理登录表单验证。我的想法是将 inputEmail 与数据库中现有的电子邮件进行比较。 If 仅模块 returns true

class 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

接口用户道{ @插入 暂停乐趣 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?

}

enter image description here

fun getUserEmail(email: String) {
    viewModelScope.launch(Dispatchers.IO) {
        repository.getUserEmail(email)
    }
}

这个方法在签名中没有指定return,也没有实际的return语句,它只是按照你告诉它的去做,这意味着调用这个函数的结果是将 Unit 分配给 emailListUnit 等于 null 吗?不。这就是为什么你的 if 总是会失败。要编写一个 return 的函数,您必须在函数签名中指定一个 return 类型,但是,因为您正在使用异步操作,所以 return 类型不是不一定是您要找的东西。考虑看看 liveData 之类的东西或了解有关异步操作的更多信息 here