OK、これは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の演算子に精通していますが、構文に苦労しています。
どんな助けでも大歓迎です。
あなたはしようとしているに実際には異なるタイプです、。あるタイプから別のタイプに変換する必要があります。switchMap
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
。
例
.switchMap{ results -> checkNewUserRequired(realm, results).toFlowable(BackpressureStrategy.DROP) }
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加