好的,这是我在RxJava中遇到的第一个问题,请保持温柔。
我正在查询Realm的现有用户,将RealmResults列表作为可流动对象返回,然后我想创建一个新用户或返回现有用户,然后转换为JSON。
这是我到目前为止所拥有的。我有点卡住。
fun getUsers(realm: Realm): Flowable<RealmResults<User>> {
return when (realm.isAutoRefresh) {
true -> realm.where<User>().findAllAsync().asFlowable().filter(RealmResults<User>::isLoaded)
false -> Flowable.just(realm.where<User>().findAll())
}
}
fun checkNewUserRequired(realm: Realm, results: RealmResults<User>): Observable<String> {
if (results.isEmpty()) {
//not complete, I will create a new user here
return Observable.just("Dummy")
} else {
val user = realm.where<User>().findFirst()!!
val detachedUser = realm.copyFromRealm(user)
return Observable.just(userToJsonString(realm, detachedUser))
}
}
val getNewUser= getUsers(realm)
.take(1)
.switchMap{ results -> checkNewUserRequired(realm, results) }
.subscribe{
//log result
result : String -> Log.d(TAG, "JSON OUTPUT: $result")
}
错误在切换映射上。我对RxJS中的运算符非常熟悉,但是我在语法上苦苦挣扎。
非常感谢任何帮助。
答案 0 :(得分:1)
您正在尝试将switchMap
的{{1}}变成Flowable
,这实际上是不同的类型。您需要从一种类型转换为另一种类型。
在您看来,最简单的解决方案是将Observable
转换为返回checkNewUserRequired
,因为您似乎没有与反压力相关的任何问题>
示例
Flowable
您还可以使用函数fun checkNewUserRequired(realm: Realm, results: RealmResults<User>): Flowable<String> = Flowable.just(
if (results.isEmpty()) "Dummy"
else {
val user = realm.where<User>().findFirst()!!
val detachedUser = realm.copyFromRealm(user)
userToJsonString(realm, detachedUser)
}
)
将现有的Observable
转换为Flowable
,但随后需要指定一个toFlowable
。
示例
BackpressureStrategy