это может быть глупый вопрос, но я не могу найти способ узнать, существует ли объект в моей базе данных или нет. В этом случае я хочу проверить, существует ли уже пользователь со всем, проверить пароль с хешированным и вернуть результат.
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))
}
}
Источник данных - это мой DatabasDAO, который возвращает объект LiveData, но всегда значение 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()
}