【发布时间】:2021-11-18 16:07:23
【问题描述】:
我已经创建了一个注册屏幕,并且正在使用 ROOM 数据库来存储用户。我成功地将它们添加到数据库中。我正在尝试对条目进行一些验证,因为我不希望用户拥有相同的用户名或电子邮件。这是我将它们添加到数据库的代码以及我如何验证它。
这是将名字、姓氏、用户名、密码、地址、城市、邮政编码、电子邮件、电话发送到数据库的函数。
mCustomerViewModel.addCustomer(customer),返回一个布尔值:
-
如果是真的用户添加
-
如果为假,则重复用户
val customer = Customer(0, firstName, lastName, userName, password,address,city,postalCode,email,phone) val flag = mCustomerViewModel.addCustomer(customer) println("FLAG ---> "+flag) if(flag.equals(true)){ Toast.makeText(applicationContext, "Success", Toast.LENGTH_SHORT).show() }else{ Toast.makeText(applicationContext, "Failed", Toast.LENGTH_SHORT).show() }
这是CustomerViewModel 类:
fun addCustomer(customer: Customer){
viewModelScope.launch(Dispatchers.IO){
repository.addCustomer(customer) // call to CustomerRepository
}
然后从CustomerViewModel类,我们调用CustomerRepository
fun addCustomer(customer: Customer): Boolean {
try {
customerDao.addCustomers(customer)
return true
}catch (ex: Exception){
return false
}
}
如您所见,在添加客户的函数中,我有一个打印语句 println("FLAG ---> "+flag) 来检查函数返回的内容。我在控制台中得到了这个:
当我运行应用程序时,if 语句不会运行,只有 else 块会运行,因为“flag”实际上不等于“true”。
我该如何解决这个问题?
【问题讨论】:
-
由于您的存储库
addCustomer函数不是挂起函数(它应该是),您可以简单地删除viewModelScope.launch调用并直接将 repo 结果从视图返回给调用者模型。 -
我原来确实有“suspend”,但是android studio不喜欢那里,让我
remove redundant suspend。 -
该警告是因为您的 Dao 函数可能没有标记为
suspend。 -
我已经用建议的更改更新了问题,但现在我遇到了一个新错误
-
@navsharma 没关系,谢谢。我知道你是新来的,所以你不习惯这些惯例。一般来说,这里关于问题的所有规则和指南以及投票系统,都与使它们对未来的读者尽可能有用的目标有关,而不仅仅是对提出问题的人有用。如果以前没有人问过,请随时就您的新问题提出一个新问题。
标签: kotlin android-room