android - 如何从登录用户返回布尔值
问题描述
您好,我正在 kotlin 中做 mvvm 项目,我使用空间登录和注册新用户。
部分代码:
view.login_btn.setOnClickListener {
val takenUsername = username.text.toString()
val takenPassword = password.text.toString()
if(takenUsername.isEmpty() || takenPassword.isEmpty()){
Toast.makeText(context, "Fill all columns", Toast.LENGTH_SHORT).show()
}else{
//Zwraca unity (naprawic to a nie null
val userEntity = mMainActivityViewModel.checkLogin(takenUsername,takenPassword)
if(userEntity.equals(null)){
Toast.makeText(context!!, "Bad login or password", Toast.LENGTH_SHORT).show()
}else{
Toast.makeText(context!!, "Login successfull", Toast.LENGTH_SHORT).show()
}
}
}
我不明白为什么,但这个函数返回一个不是 null 的单位。我完全不知道。
有人可以建议我应该在第 11 行放什么而不是 null 吗?
解决方案
我的朋友,您采取了错误的方法。您需要使用实时数据从视图模型中获取回调。
private fun setupLoginObserver() {
mMainActivityViewModel.loginStatus.observe(this, Observer { isValidUser ->
if (isValidUser) {
Toast.makeText(requireContext(), "Login successful", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(requireContext(), "Bad login or password", Toast.LENGTH_SHORT).show()
}
})
}
您可以从 onViewCreated() 调用此方法
您的按钮单击侦听器应如下所示:
view.login_btn.setOnClickListener {
val takenUsername = username.text.toString()
val takenPassword = password.text.toString()
if (takenUsername.isEmpty() || takenPassword.isEmpty()) {
Toast.makeText(context, "Fill all columns", Toast.LENGTH_SHORT).show()
} else {
//Check user is valid or not in db and you will get the callback on line #
mMainActivityViewModel.checkLogin(takenUsername, takenPassword)
}
}
视图模型:
fun checkLogin(username: String, password: String) {
viewModelScope.launch(Dispatchers.IO) {
repository.loginUser(username, password)?.let {
mutableLoginStatus.postValue(true)
} ?: mutableLoginStatus.postValue(false)
}
}
用户存储库:
suspend fun loginUser(username: String, password: String): User? {
return userDao.loginUser(username, password)
}
最后是 UserDao:
@Query("SELECT user_table.* FROM user_table WHERE username= :username AND password=:password")
suspend fun loginUser(username: String, password: String): User?
我对您的代码做了一些必要的更改并推送到了这个分支。
https://github.com/parmeshtoyou/Querto/tree/user_validate_through_live_data_stackoverflow
您可以查看更改。
如果您需要任何澄清,请告诉我。
快乐编码。
推荐阅读
- c# - 如何使用 onclick 属性 c# webbrowser 单击按钮?
- python - Kivy 2 行标签文本
- byte-buddy - 如何使用 ByteBuddy 的 InvokeDynamic 类调用虚拟方法句柄?
- c# - 数据库似乎在执行期间更新,然后更改消失
- c - 使用函数交换两个变量的值时,为什么我应该以地址而不是实际变量名为目标?
- ansible - Ansible-playbook - 如何在字符串中添加大写
- java - Maven项目中的Logback
- discord - 试图制作一个机器人来计算语音频道中的成员
- python-3.x - 比较 2 个相同大小的元组列表:比较和交换
- python - Plotly:如何针对多个其他时间序列显示一个变量的回归线?