房间 - SELECT查询,获取或默认

时间:2017-10-26 11:00:48

标签: android kotlin rx-java2 android-room

在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("")

2 个答案:

答案 0 :(得分:3)

  

如果没有,则流不会为getUserByName(&#34; John&#34;)返回任何内容   John在DataBase中。有没有办法获得默认值,比如用户(&#34;&#34;)

没有默认机制。

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

或者您可以从Flowable更改为Single。使用Single,如果没有符合查询的行,则会触发onError。然后,您可以实施onErrorReturnonErrorResumeNext以返回默认值

答案 1 :(得分:0)

在这种情况下,您可以使用Maybe代替Flowable

  

可能:从概念上讲,它是Single和Completable的联合,提供捕获排放模式的方法,其中可能有0或1项或某些反应源发出错误信号。

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

Reference