Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting value change using Rxjava

Can we detect if a class member value is getting changed using RxJava?? Say in a class there is a variable var, now can we get notified whenever the value of var changes using RxJava.

like image 258
Debu Avatar asked Jul 05 '16 12:07

Debu


2 Answers

You can use something like this:

private final BehaviorSubject<Integer> subject = BehaviorSubject.create();
private Integer value=0;

public Observable<Integer> getUiElementAsObservable() {
    return subject;
}

public void updateUiElementValue(final Integer valueAdded) {
    synchronized (value) {
        if (valueAdded == 0)
            return;
        value += valueAdded;
        subject.onNext(value);
    }
}

and subscribe to it like this:

compositeSubscription.add(yourClass.getUiElementAsObservable()
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer userMessage) {
                    setViews(userMessage,true);
                }
            }));

you have to create setter for all of your variables that you want something subscribe to their changes and call onNext if change applied.

UPDATE

When an observer subscribes to a BehaviorSubject, it begins by emitting the item most recently emitted by the source Observable

you can see other type of subjects here: http://reactivex.io/documentation/subject.html

some useful link: about reactive programming : https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 and about rxjava : https://youtu.be/k3D0cWyNno4

like image 51
Siavash Abdoli Avatar answered Oct 18 '22 01:10

Siavash Abdoli


http://rxmarbles.com/#distinctUntilChanged

Code

Observable.just("A", "B", "B", "A", "C", "A", "A", "D")
    .distinctUntilChanged()
    .subscribe(abc -> Log.d("RXJAVA", abc));

Result

A
B
A
C
A
D
like image 5
HJ Byun Avatar answered Oct 18 '22 03:10

HJ Byun