当前位置: 首页 > 知识库问答 >
问题:

Android:使用Room和RxJava检查数据库中是否存在对象

徐博雅
2023-03-14
@Dao
interface UserDao {
    @Query(value = "SELECT * FROM User LIMIT 1")
    fun get(): Single<User?>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun add(profile: User)
}
override fun isUserLogin(): Single<Boolean> = userDao
            .get().async()
            .onErrorReturn { null }
            .map { it != null }

在这种情况下,我希望返回null,但当我执行代码时,它会引发一个异常,并带有以下消息:

提供的值为空

我不能使用optional,因为Dao返回的是single ,所以OnErrorReturn应该返回相同的类型。

在不改变DAO的情况下,如何检查用户是否存在?

共有1个答案

卢阳泽
2023-03-14

我认为,除了Android和Room之外,正确的方法是在您的查询中使用count

@Query("SELECT COUNT(*) from User")
fun usersCount() : Single<Int>

它将返回表中的行数,如果是0,您知道数据库中没有用户,所以。

override fun isUserLogin(): Single<Int> = userDao
            .usersCount()
            .async()
            .map { it > 0 }

如果你真的想用丑陋的方式去做:

@Query(value = "SELECT * FROM User LIMIT 1")
fun get(): Single<User>

不要使用可为空的类型,这是毫无意义的。然后映射到Boolean并处理异常:

override fun isUserLogin(): Single<Boolean> = userDao
        .get()
        .async()
        .map { true }
        .onErrorReturn { false }
 类似资料:
  • 我是一个拥有ROOM,RXJava和Android的新手。 在Android应用程序测试中,REST服务检索用户列表。如果用户已经存在,则必须修改此列表。如果该用户不存在,则将该用户插入到数据库中。如果用户已经存在,则不插入该用户。 在活动中的验证如下: Iserdao consiste en lo Siguiente: El UserRepository contiene lo siguient

  • 问题内容: 我正在尝试根据特定的ID查询数据库。 如果这是第一次运行该活动,则该表将与id列一起存在,但是将不存在具有特定id的记录。如何检查该特定记录是否存在,如果不存在,则添加它?我发现有关检查特定列是否存在的很多信息,但与检查特定记录是否存在无关。 到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但是由于某种原因,它实际上正在返回1。我可以在if语句中使用什么来验证尚未创建id列?

  • 我正在将行插入房间数据库,我想检查该行是否已成功插入。 这是我的刀 当我插入一行时,响应为1、2、3,依此类推。。所以它返回的是(是这样吗?) 因此,需要检查行是否正确插入。 我是否可以检查插入的rowId是否大于0,然后将其成功插入数据库。 注意:我得到的结果是1,2,3等,应该是rowId。 请建议这种方法是否正确?基本上,如果插入不成功,我想阻止用户继续 谢谢你的建议和意见

  • 我在房间数据库中使用MVVM架构模式,当使用Livedata和update row时,它会立即显示recylerview中的更改。 但是我想在mvvm中使用Rxjava而不是livedata来显示数据和更改,但是当更新一行时,它不会立即在recyclerview中显示更改。这是我的代码: 道 LessonRepository 视图模型 获取片段中列表的方法 更新行的方法 我应该做什么,我应该修复哪

  • 问题内容: 我是通过Android(Java)刚接触Firebase的,并且想知道如何检查用户是否已存在以下格式的数据库中: 例如,按下按钮后,我想检查Firebase以查看用户名“ Michael”是否存在(对象michael中的第一级michael-而不是“ michael”。 谢谢 问题答案: 使用方法或onDataChange中的SingleValueEvent

  • 问题内容: 因此,基本上,我想在注册表格中添加一个功能,该功能将检查数据库中是否已存在该用户名。 我对AJAX有几个问题- 1)我想创建一个AJAX请求on_change函数,所以像这样- 因此,据我所知,我必须在validation.php文件中包含所有在PHP中进行的验证,对吗?是否需要任何特殊的验证,或者只是使用sql语句进行的简单验证- 2)据我所知,我也必须通过$ .ajax传递POST