問題タブ [rx-java]

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.

0 投票する
1 に答える
3423 参照

android - RxJava をサポートする Retrofit サービスの連鎖

レトロフィットの RxJava サポートを使用してオブザーバブルを連鎖させることに問題があります。私はおそらくそれを使用する方法を誤解しています, そうでなければ、それは改造のバグかもしれません. ここの誰かが何が起こっているのかを理解するのを手伝ってくれることを願っています。編集:私はこれらの応答に MockRestAdapter を使用しています - RxSupport の実装がわずかに異なるため、これは関連している可能性があります。

これは偽の銀行アプリです。送金を行おうとしています。送金が完了したら、アカウントの値を更新するためにアカウント リクエストを実行する必要があります。これは基本的に、flatMap を試してみる言い訳にすぎません。残念ながら、次のコードは機能しません。サブスクライバーに通知されることはありません。

ケース 1: 改造によって生成された 2 つのオブザーバブルを連鎖させる

転送サービス (注: レトロフィットで生成されたオブザーバブルを返します):

アカウント サービス (注: レトロフィットで生成されたオブザーバブルを返します):

改造によって生成された 2 つのオブザーバブルを連結します。

ケース 2: 独自のオブザーバブルを作成し、レトロフィットで生成されたものとチェーンする

「フラット マップ」呼び出しに対する Retrofit の組み込み Rx サポートを無視すると、完全に機能します。すべてのサブスクライバーに通知が届きます。下記参照:

新しいアカウント サービス (注: オブザーバブルは生成されません):

独自のオブザーバブルを作成し、アイテムを自分で発行します。

どんな助けでも大歓迎です!

0 投票する
4 に答える
7367 参照

java - Android での rxjava のデフォルトのスケジューラ

Retrofit を使用して、非同期ネットワーク呼び出しの rxjava Observable を返しています。

私は次の呼び出しを繰り返していることに気づきました。

someApiCall().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())

私は常に IO スレッドをサブスクライブし、Android のメイン スレッドを監視しているようです。これは、私が見つけたすべてのリソースが推奨しているベスト プラクティスのようです。おそらく長時間の計算を除けば、いつこのパターンから逸脱したいのかよくわかりません。

subscribeOn スレッドと observeOn スレッドをデフォルトにすることで、このボイラープレートを削除する方法はありますか?

これはrxjava プラグインの使用例ですか? (それらの使用例はあまり見つかりません。)

retrofit executorをいじって、ネットワーク境界でデフォルトのスレッドを設定できますか?

0 投票する
1 に答える
999 参照

scheduler - rxjava: デフォルトのアイドル状態のジョブを持つキュー スケジューラ

クライアントサーバーアプリケーションがあり、rxjava を使用してクライアントからのサーバーリクエストを実行しています。クライアントは一度に 1 つの要求のみを実行する必要があるため、トランポリン スケジューラに似たスレッド キュー スケジューラを使用するつもりです。

ここで、サーバー上の変更を監視するメカニズムを実装しようとしています。そのため、サーバーに何らかの変更が加えられて結果が返されるまでブロックする長期要求を送信します (ロング プル)。

この長いプル リクエストは、ジョブ キューがアイドル状態のときにのみ実行する必要があります。通常のリクエストがスケジュールされているときに監視リクエストを自動的に停止し、キューが空になったときに再び開始する方法を探しています。この動作を得るためにトランポリン スケジューラを変更することを考えましたが、これは一般的な問題であり、より簡単な解決策があるのではないかと感じています。

0 投票する
3 に答える
5654 参照

android - EventBus を RxJava に置き換える - N サブスクライバーが常にリッスンする

EventBusパターンをRxJavaAndroid アプリで置き換えています。キャッシュ シングルトンのデータの更新を関係者に警告するイベントがありました。Web サービスが呼び出されるたびに、データが更新され、サブスクライバーは投稿されたイベントを介して警告されます。

私はRxJavaでこれに近いものを設定していAsyncSubjectます。オブザーバーはサブジェクトから 1 つのイベントを取得しますが、その後、onCompleteイベントを取得してサブスクライブを解除します。これは、UI が最初に読み込まれるときに機能しますが、データを更新する必要がある場合、通知されるサブスクライバーはありません。からのより多くのイベントをSubscribersリッスンし続けるように指示するにはどうすればよいですか?onNextSubject

Subject最新のアイテムを報告する が必要です。PublishSubjectサブスクリプション後にアイテムを発行するだけなので、私のニーズを完全には満たしていません。サブスクライバーはさまざまな時点 (おそらく最初のデータ イベントの後) に監視を開始するため、サブジェクトが最後に監視されたアイテムを発行し、後続のアイテムのためにストリームを開いたままにする必要があります。AsyncSubject と PublishSubject の組み合わせが必要なようです。組み込みのクラスでこれを達成する方法はありますか、それとも独自のサブジェクトを作成する必要がありますか?

0 投票する
3 に答える
6844 参照

java - RxJava におけるバッファの誤った理解

RxJava に慣れようとしています。私が達成しようとしているユースケースは次のとおりです。

画面にボタンがあり、タップ数を収集しようとしています。そのため、ユーザーがボタンをタップすると、クリックが登録され、ログが生成されます。ユーザーがボタンを 2 回クリックすると、両方のクリックが登録されて収集され、1 ではなく 2 が出力されます。

基本的に、一定期間にわたってクリック数を蓄積し、最終結果を吐き出そうとしています。「buffer」は、使用する必要がある方法だと思います。Android で簡単な例を作成しました (コードは次のとおりです) が、バッファ メソッドは、すべてのイベント入力を収集してコレクションを吐き出すほど単純ではないようです。

ここで私の理解における誤解を理解するのを手伝ってくれる人はいますか?

問題 1_getObserver() :さんonNextから累積タップ数のリストが送られてくることを期待しています。したがって、ボタンが 5 回押された場合、それぞれの値が「1」である 5 つの項目を含むリストが期待されます。既存のコードでは、常に空のリストを取得しています。

問題 2List<Integer> integers :サイズを確認してイベントが受信されない場合は、基本的にコンソール ログを実行します。リストが空でない場合は、「タップを受信して​​いません」というコンソール ログをスローします。Observable は決して停止しないようです。ボタンタップが登録されていない場合でも、タイマーのように常に動き続けます。過去10秒間にイベントが登録されていない場合、Observableを停止する方法はありますか?

問題 3 : エミットの数がほぼ指数関数的に増加しているように見えます。それは、以前のすべてのボタンの空のタップを集めているようなものです。