房间 - 选择查询、获取或默认



在SQL Brite中,有一个方法mapToOneOrDefault。房间里有类似的东西吗?

说模型

@Entity(tableName = "users")
data class User(@PrimaryKey val name: String)

和道

@Dao
interface UserDao {
    @Query("SELECT FROM users where name = :name")
    fun getUserByName(name: String): Flowable<User>
}

如果数据库中没有John,则流不会返回任何getUserByName("John")。有没有办法获得默认值,比如User("")

不是流不返回任何getUserByName("John")如果没有 约翰在数据库。有没有办法获取默认值,比如 User(")

没有默认机制。

您可以从Flowable<User>更改为Flowable<List<User>>。 如果没有用户,您将获得一个空列表。您可以使用map检查并返回默认值或filter + switchIfEmpty

或者你可以从Flowable更改为Single.使用 Single ,如果没有与您的查询匹配的行,将触发onError。然后,可以实现onErrorReturnonErrorResumeNext以返回默认值

在这种情况下,

您可以使用Maybe代替Flowable

也许:从概念上讲,它是单一和可组合的联合,提供了捕获发射模式的方法,其中可能存在 0 或 1 项或由某个无功源发出信号的错误。

然后,如果查询未返回值,则可以使用运算符 defaultIfEmpty 映射到新对象。

参考

最新更新