在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
。然后,可以实现onErrorReturn
或onErrorResumeNext
以返回默认值
您可以使用Maybe
代替Flowable
。
也许:从概念上讲,它是单一和可组合的联合,提供了捕获发射模式的方法,其中可能存在 0 或 1 项或由某个无功源发出信号的错误。
然后,如果查询未返回值,则可以使用运算符 defaultIfEmpty
映射到新对象。
参考