I'm trying to sample the output of a slider in Android.
The set up is: A PublishSubject mSubjTrim. In the OnTouchEvent of the slider, I call mSubjTrim.onNext(progress)
I create an observable from mSubjTrim
public final Observable<Integer> mObsTrim = mSubTrim.sample(1, TimeUnit.SECONDS)
(it's set to seconds because it's easier to see logging of output in increments of seconds. In actual use this would be about 50ms sample)
I subscribe to mObsTrim like so:
RxBus.Instance().mObsTrim.subscribe(trim -> {
Logy.CallPrint(LOGY_ENABLE, CLASSNAME, "Trim Change");
DispatchTrimChange(trim);
});
The output upon tweaking the slider results in the following output however
ParameterSender*::Trim Change @1473456738766 // @timeOfEvent via System.currentTimeMillis()
ParameterSender*::Trim Change @1473456745764
ParameterSender*::Trim Change @1473456745765
ParameterSender*::Trim Change @1473456745765
ParameterSender*::Trim Change @1473456745766
ParameterSender*::Trim Change @1473456745766
ParameterSender*::Trim Change @1473456745766
ParameterSender*::Trim Change @1473456745767
This is hardly working as sample is described to work.
I also try
public final Observable<Integer> mObsTrim = mSubTrim.sample(1, TimeUnit.SECONDS).debounce(5, TimeUnit.MILLISECONDS);
And the output is no different!
Why can't I just get a SINGLE update on trim every second?
Edit
So I added a logging message to the listener so I know when the last input was made at
MyActivity::SetTrim @1473458620018 // This is a single input event with nothing before it
ParameterSender*::Trim Change = -25.2 @1473458620287
ParameterSender*::Trim Change = -25.2 @1473458620288
ParameterSender*::Trim Change = -25.2 @1473458620288
ParameterSender*::Trim Change = -25.2 @1473458620289
ParameterSender*::Trim Change = -25.2 @1473458620289
ParameterSender*::Trim Change = -25.2 @1473458620289
ParameterSender*::Trim Change = -25.2 @1473458620290