实体类别
@Entity(tableName = "user_table")
data class User(
@PrimaryKey(autoGenerate = true)
//....
) {
constructor(
userID: Int
) : this(
userID,
//...
)
}
刀类
@Dao
interface UserDao {
@Insert(onConflict = IGNORE)
fun addUser(user: User): Long
//.......
}
资料档案库类
class RoomUserRepository(context: Context) {
//...
suspend fun addUser(user: User): Long = userDao.addUser(user)
//...
}
视图模式类
class UserViewModel(val context: Application) : AndroidViewModel(context) {
//...
var userID: Long = 0
fun addUser(user: User) {
viewModelScope.launch(Dispatchers.IO) {
userID = roomUserRepository.addUser(user)
}
}
//...
}
注册按钮onclick{}
clicked = !clicked
if (confirmpassword != password) {
message = "Incorrect password! please try again"
} else if (inputChack(fullname, email, password)) {
message = "Information is incomplete"
} else {
// Create User
user.email = email
user.fullName = fullname
user.password = password
userVM.addUser(user)
// Create Cart
cart.userID = userVM.userID.toInt()
cartVM.addCart(cart)
Log.d("user & cart", "adding users & cart")
}
正如您所看到的,当用户单击SIGN UP
时,我将在我的数据库中创建User & Cart
,用户创建工作正常,但当我创建购物车时,我必须传递用户ID,我从userID
变量中获取它,您可以在ViewMode Class
中找到它,问题是值正在获取cart.userID = userVM.userID.toInt()
,然后更新了它
我只想
调用userVM.addUser(user)
后,我必须等到userID
变量得到更新(查看ViewMode类),然后我得到更新后的值cart.userID = userVM.userID.toInt()
2条答案
按热度按时间4jb9z9bj1#
那就试试这个:
ha5z0ras2#
根据文档,下面的函数的返回值是rowId,而不是userID。
如果你想得到用户ID,你应该写一个get函数,如下所示。
然后,添加如下所示的观察者
另外,不要忘记添加必要的依赖项。