ストリームの現在の値でビューを更新する必要があるMVCアプリケーションがあります。私は、ストリームを取得するには、コントローラで使用RxJavaサブスクリプションが正しくサブスクライブされない
public Observable<Integer> getStreamInstance(){
if(stream == null){
this.stream = Observable.create((Subscriber<? super Integer> subscriber) -> {
new HeartbeatStream(frequence,subscriber).start();
});
}
return stream;
}
:私はこの方法を持っているモデルでは 。私は単に現在の値に鑑みてラベルを更新するスタート方法で
public void start(){
this.sb = stream.subscribe((Integer v) -> {
view.updateCurrValue(v);
});
}
public void stop(){
this.sb.unsubscribe();
}
:次に、コントローラに私はこれらの2つの方法を持っています。 登録を解除して更新を停止しようとするまでうまくいきます。実際には、ビュー内のボタン「停止」を押すと、ラベルは現在の値で更新され続け、「開始」をもう一度押すと、ラベルには2つの異なるストリームの値が表示されます。最初の "開始"と思われる2番目の "開始"の2番目のプレスで作成されています。 どこが間違っていますか?
EDIT:
public class HeartbeatStream extends Thread{
private Subscriber<? super Integer> subscriber;
private int frequence;
private HeartbeatSensor sensor;
public HeartbeatStream(int freq, Subscriber<? super Integer> subscriber){
this.frequence = freq;
this.subscriber = subscriber;
sensor = new HeartbeatSensor();
}
public void run(){
while(true){
try {
subscriber.onNext(sensor.getCurrentValue());
Thread.sleep(frequence);
} catch (Exception e) {
subscriber.onError(e);
}
}
}
これはHeartbeatStreamクラスです。 HeartbeatSensorは、ハートビートの頻度をシミュレートする値を定期的に生成するクラスです。
heartbeatStreamクラスを追加しました。 – User999