How to transfer data between actions using RxJava in android?

I need to pass some data between two actions MainActivityand ChildActivity. Click the button MainActivityto open ChildActivityand send an event with data. I have a singleton:

Subject<Object, Object> subject = new SerializedSubject<>(PublishSubject.create());

and in MainActivityI have the following button click handler:

    public void onClick(){
        startActivity(new Intent(MainActivity.this, ChildActivity.class));
        subject.onNext(new SomeEvent(data));
    }

and event listener subscriber in ChildActivity:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addEventListeners();
    }

    private void addEventListeners() {
        subject.ofType(SomeEvent.class)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io()).subscribe(
                event -> {
                    loadData(event.getData());
                });
    }

When I dispatch an event after the activity is triggered , and the call addEventListenersto ChildActivity onCreateis still not subscribed to this event, loadData()not called.

What is the correct way to transfer data between actions using RxJava (if possible)?

+4
2

:

, PublishSubject. PublishSubject Observable . , , .

PublishSubject BehaviorSubject, . , .

.

+3

- RxJava2

1- :

public final class RxBus {

private static final BehaviorSubject<Object> behaviorSubject
        = BehaviorSubject.create();


public static BehaviorSubject<Object> getSubject() {
    return behaviorSubject;
}

}

2-

                       //the data to be based
                    MyData  data =getMyData();
                    RxBus.getSubject().onNext(data) ;
                    startActivity(new Intent(MainActivity.this, AnotherAct.class));

3 -

    disposable = RxBus.getSubject().
            subscribeWith(new DisposableObserver<Object>() {


                @Override
                public void onNext(Object o) {
                    if (o instanceof MyData) {
                   Log.d("tag", (MyData)o.getData();
                    }
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
    });

4-unSubscribe, :

 @Override
protected void onDestroy() {
    super.onDestroy();
    disposable.dispose();
}
+3

Source: https://habr.com/ru/post/1655347/


All Articles