检查房间中是否已存在对象

时间:2020-03-22 18:29:42

标签: android android-room

这可能是一个愚蠢的问题,但是我似乎找不到找到数据库中对象是否已经存在的方法。在这种情况下,我想检查所有用户是否已经存在,使用带哈希值的密码检查密码并返回结果。

private fun getLoginResult(username: String, password: String): Result<LiveData<BudgetyUser>> {

    try{
        val user = dataSource.getUser(username)
        val passwordDB = user.value?.userPassword
        val saltDB = user.value?.userSalt
        if(user.value == null){
            return Result.ErrorUserNotFound("User $username not found.")
        }
        if (!hashStringSha512(password, saltDB!!).contentEquals(passwordDB!!)) {
            return Result.ErrorWrongPassword("Wrong password.")
        }
        return Result.Success(user)
    } catch (e: SQLiteConstraintException){
        return Result.ErrorUserNotFound("User $username not found.")
    }
    catch (e: Throwable) {
        return Result.LoginException(IOException("Error logging in", e))
    }
}

dataSource是我的DatabasDAO,它返回一个LiveData对象,但始终为null。我尝试通过提供的用户名获取用户,如果返回的对象为null,则不存在具有该名称的用户。至少那是我希望它工作的方式。任何想法如何使它那样工作吗?

预先感谢!

PS。无法找到并回答我所需要的。

interface UserDBDao {

    @Insert
    fun insert(user: BudgetyUser)

    @Update
    fun update(user: BudgetyUser)

    @Query("SELECT * FROM users WHERE user_name = :username")
    fun getUser(username: String) : LiveData<BudgetyUser>


    @Query("DELETE FROM users")
    fun deleteUsers()



}

1 个答案:

答案 0 :(得分:2)

我们不会直接从LiveData的值中提取数据,您应该观察它。示例:

val userLiveData = dataSource.getUser(username)
userLiveData.observe(this, Observer { user ->
    // Handle user data here
}

现在,如果要查找数据库中是否存在条目,则应在DAO上使用COUNT()。示例:

@QUERY("SELECT COUNT() FROM BudgetyUser WHERE id = :id")
fun count(id: Int): Int

然后,要确定您要查找的用户是否在数据库中,只需检查DAO的count函数的结果是否大于0。