gpt4 book ai didi

kotlin - RxJava2 Kotlin SwitchMap从RealmResults到Observable

转载 作者:行者123 更新时间:2023-12-02 13:21:37 25 4
gpt4 key购买 nike

好的,这是我在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中的运算符非常熟悉,但是我在语法上苦苦挣扎。

任何帮助,不胜感激。

最佳答案

您正在尝试将switchMapFlowable转换为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

示例
.switchMap{ results -> checkNewUserRequired(realm, results).toFlowable(BackpressureStrategy.DROP) }

关于kotlin - RxJava2 Kotlin SwitchMap从RealmResults到Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54243862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com