Pollingserviceを実装して、nDelay SecondsごとにREST APIを呼び出し、データが変更された場合はすべてのユーザに通知したいと考えています。データが変更されていなくても、コンシューマーに常に値を返すので、コードに少し問題があります。RXJava2/RXAndroid 2とRetrofitを使用したポーリング
private Observable<List<HueLight>> pollingLightsObservable = null;
public Observable<List<HueLight>> getPollingLightsObservable() {
if (pollingLightsObservable == null) {
pollingLightsObservable = Observable.fromCallable(
() -> LightManager
.getInstance(context)
.getLights()
.blockingSingle())
// .distinctUntilChanged((l1, l1) -> !l1.equals(l2))
.repeatWhen(o -> o.concatMap(v -> Observable.timer(1, TimeUnit.SECONDS)));
}
return pollingLightsObservable;
}
distinctUntilChangedを有効にするか使用すると何も変更されません。私はそれを私の繰り返しの前後に置いても問題ありません。
私のRetroFit CallはObservableを返すので、blockingSingle()を使用する必要があります。観測を使用すると、直接それは、このサンプルで "4、8、12、16、.." のアイテムの復帰につながる:/
LightManager.getInstance(context).getLights()
.repeatWhen(o -> o.concatMap(v -> Observable.timer(1, TimeUnit.SECONDS)))
は現在、私は、異なるクラスから購読してのactivites
this.lightChangeSubscriber = PollingManager
.getInstance(getContext())
.getPollingLightsObservable()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(hueLights -> {
{
Log.d(TAG, "Lights received successfully! Size=" + hueLights.size());
}
});
私は素敵なインターフェイスとタイマーを使用してポーリングを作成することを避けるだろう。あなたは何をお勧めします ?
https://github.com/kaushikgopal/RxJava-Android-Samples – eurosecom