問題タブ [rx-kotlin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kotlin - RxKotlin flattenAsObservable(): メソッド参照と型が一致しません
一部の Java コードを Kotlin に変換していますが、問題が発生しています。flattenAsObservable()
Java でのコードは次のようになります。
Kotlinでこれまでに持っているものは次のとおりです。
2番目に下線が引かれsearchResults
、次のエラーが表示されます。
交換できます
と
そしてそれはうまくいくでしょう。メソッド参照を正しく行うにはどうすればよいですか? または、この場合にできない理由は何ですか?
RootSearchResponse:
android - バルブが再び開かれる前に放出された最後の要素のバッファリングを含む、Observable ストリームの「バルブ」の実装
RxJava (2.0) で何かを実装する方法に頭を悩ませようとしています。これは Android 用であり、私は Kotlin を使用していますが、ここではプラットフォームと言語の選択は重要ではありません。
アイデアは、RxJava に基づいてある種の MVP アーキテクチャを構築することです。この実装では、ライフサイクル イベント、またはビューがアタッチされているかデタッチされているかを示す値のストリーム (簡単にするために s ) を公開する ( もカスタムActivity
も可能性があります) について考えています。Fragment
View
Boolean
根底にある考え方は基本的に次のとおりです。
そしてもう一方の端から、プレゼンターはObservable
、ビューによってレンダリングされる、画面の状態を表すオブジェクトのストリームである を公開します。
(これは、このシリーズhttp://hannesdorfmann.com/android/mosby3-mvi-1で説明されている概念に従います。これは、プレゼンターが、複数の異なる状態ではなく、画面の状態全体をカプセル化するスタンドアロン オブジェクトをビューにフィードするという事実に要約されます。ビューのメソッド)。
そして、これら 2 つの監視可能なストリームを次のようにバインドしたいと思います。
ビューがデタッチされるたびに、プレゼンターからの入力は無視されます (バックプレッシャの問題が発生しないように、バッファリングされません)。
ただし、ビューが再アタッチされると、プレゼンターが発行した最新の状態が取得されます。つまり、最大で 1 つの状態インスタンスのみがバッファリングされます。
String
次のように動作します (簡単にするために、状態が型であると仮定します)。
最善の慣用的な解決策が何であるかはわかりません。
として実装しようとしましたObservableTransformer
が、うまくいきませんでした。トランスフォーマーはステートレスであるべきだと思いますが、私の解決策は、何が送信されたかを明示的に追跡し、最後の要素を「手動で」バッファリングすることに引き寄せられました。
https://github.com/akarnokd/RxJava2Extensions/blob/master/src/main/java/hu/akarnokd/rxjava2/operators/FlowableValve.javaを見つけましたが、実装は非常に複雑に見え、信じられませんより単純な方法で実行しないでください (すべての柔軟性は必要ありません。説明されているユースケースで機能するものだけが必要です)。
Android のコンテキスト内で、まだ考慮すべきことが他にあるかどうかなど、洞察をいただければ幸いです。また、RxKotlin バインディングを使用していないことにも注意してください (そうかもしれませんが、ここで必要になるとは思いませんでした)。
編集:
以下は私の現在の実装です。私が言ったように、私はそれが明示的にステートフルであるため、あまり満足していません.RxJavaのいくつかの構造を利用して、宣言的に実現する必要があると私は信じています.
異なるタイプの 2 つのストリームをマージする必要がありましたが、それcombineLatest
もzip
うまくいかなかったので、トリックに頼って、両方の異なるタイプのイベントに共通のラッパーを作成しました。再び特定のオーバーヘッドが発生します。
kotlin - RxJava2 要素がない場合、空の Observable を返す可能性があります
Maybe
andよりもJavaRx 2の型を使用するためのより良い/より慣用的な方法はflatMap
ありtry/catch
ますか? 次の例では、 を受け取りMaybe<User>
、フライトのランダム チケットを予約しようとします。ユーザーが存在しない場合は、空の を返しますObservable
。
Maybe<User>
を に変換し、とができるObservable
から開始する必要があるのは、少しごちゃごちゃしているようです。これを行うためのよりきちんとしたアプローチがあるかどうか疑問に思っていますか?Observable<Observable<User>>
flatMap
try/catch
rx-java - RxKotlin (RxJava2) の timeout() が TimeoutException をスローしない
2 つの異なるタイムアウト値を使用する例を動作させようとしています。最初の放出の最初の大きな値と、その後のすべての放出の短い値。この例は、RxJava v1x の Java から Kotlin に変換されていますが、これを v2x にしようとしています (違いがあるかどうかはわかりません)。
問題は、最初のイベントのタイムアウトでTimeoutException
. 値を 500 ミリ秒未満に設定すると、スタック トレースが出力されることを期待していますが、タイムアウトが発生していないかのように出力されます (タイムアウトが 40 ミリ秒に設定された後続の出力は、期待どおりにスタック トレースになります)。初期タイムアウトが成功しない次の例の何が問題になっていますか?
編集: 2017 年 6 月 20 日
Kotlin 1.1.2-5 で IntelliJ を使用し、提案された変更を適用しても、まだエラーが発生します。とにかくコードを実行しようとすると、予想どおり、次のようになります。
Error:(34, 21) Kotlin: Interface Function does not have constructors
rx-java - RxJava1: Observable の変換方法>>オブザーバブルへ>
- >
誰かが私が直面しているこの問題の適切な解決策を見つけるのを手伝ってくれますか?
Observables
必要なデータを提供するバックエンド サービスがありますEvents
。EventGroup
同じグループ内のすべてのイベントの ID を含む をイベントから取得できます。- 次に
Event
、このグループの一部であるすべての を取得できます。
ただし、 を取得しObservable<List<Observable<Event>>>
たいところに を取得しObservable<List<Event>>
ます。ネストされた を実際にサブスクライブせずに、どうすればこれを達成できObservables
ますか?
TL:DR
Observable<List<X>>
から取得するにはどうすればよいObservable<List<Observable<X>>>
ですか?