如何使用 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
分配给 emailList
。 Unit
等于 null 吗?不。这就是为什么你的 if 总是会失败。要编写一个 return 的函数,您必须在函数签名中指定一个 return 类型,但是,因为您正在使用异步操作,所以 return 类型不是不一定是您要找的东西。考虑看看 liveData 之类的东西或了解有关异步操作的更多信息 here
我是 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
分配给 emailList
。 Unit
等于 null 吗?不。这就是为什么你的 if 总是会失败。要编写一个 return 的函数,您必须在函数签名中指定一个 return 类型,但是,因为您正在使用异步操作,所以 return 类型不是不一定是您要找的东西。考虑看看 liveData 之类的东西或了解有关异步操作的更多信息 here