2015-10-21 9 views
9

私は、Rx-Javaを観測可能にし、購読することで、レトロフィットでリクエストを行うアンドロイドプロジェクトに取り組んでいます。Javaで改造不可能なリクエストをデバウンスする方法は?

しかし、いくつかのやりとりでは、この要求は複数回呼び出すことができ、私はあらかじめ定義された時間枠内で最後のものを実行したい(デバウンス)。

私は、観察に直接debounceオペレータを適用しようとしましたが、以下のコードは、いくつかの相互作用が発生するたびに実行されるため、それは動作しません。

mApi.getOnlineUsers() 
    .debounce(1, TimeUnit.SECONDS) 
    .subscribe(...) 

私はそれが唯一の観測可能に作成する必要があります推測し、すべての対話は、実行を同じ観測可能性に「追加」する必要があります。しかし、私はRx Javaで新しくて、何をすべきか正確にはわかりません。

ありがとうございます!

答えて

8

トリガーイベントに応じて実行を開始したいとします。

Observable<Event> trigger = ... // e.g. button clicks 

あなたは、このようなあなたのAPIへの呼び出しにトリガイベントを変換することができます、また

trigger 
    .debounce(1, TimeUnit.SECONDS) 
    .flatMap(event -> mApi.getOnlineUsers()) 
    .subscribe(users -> showThemSomewhere(users)); 

debounceオペレータが時間枠内最後発生を取ることの通知が、throttlefirst意志をを最初にとしてください。ユースケースに応じて、どちらか一方を使用することができます。

+0

良い点ですが、[PublishRelay](https://github.com/JakeWharton/RxRelay)の使用を検討することもできます。 – miroslavign