在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>
}
如果DataBase中没有getUserByName("John")
,则不会为John
返回任何内容。有没有办法获得默认值,比如User("")
?
答案 0 :(得分:3)
如果没有,则流不会为getUserByName(&#34; John&#34;)返回任何内容 John在DataBase中。有没有办法获得默认值,比如用户(&#34;&#34;)
没有默认机制。
您可以从Flowable<User>
更改为Flowable<List<User>>
。如果没有用户,您将获得一个空列表。您可以使用map
检查并返回默认值或filter
+ switchIfEmpty
。
或者您可以从Flowable
更改为Single
。使用Single
,如果没有符合查询的行,则会触发onError
。然后,您可以实施onErrorReturn
或onErrorResumeNext
以返回默认值
答案 1 :(得分:0)
在这种情况下,您可以使用Maybe
代替Flowable
。
可能:从概念上讲,它是Single和Completable的联合,提供捕获排放模式的方法,其中可能有0或1项或某些反应源发出错误信号。
如果查询未返回值,则可以使用运算符defaultIfEmpty
映射到新对象。