gpt4 book ai didi

android - 如何在 android 中使用 RxJava 在 Activity 之间传递数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:24 25 4
gpt4 key购买 nike

我需要在两个 Activity MainActivityChildActivity 之间传递一些数据。单击 MainActivity 上的按钮应打开 ChildActivity 并发送带有数据的事件。我有单例:

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

MainActivity 中,我有以下按钮点击处理程序:

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

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());
});
}

当我在启动 Activity 后发送事件并在 ChildActivity 中调用 addEventListenersonCreate 仍然没有订阅此事件并且 loadData( ) 不会被调用。

使用 RxJava 在 Activity 之间传递数据的正确方法是什么(如果可能的话)?

最佳答案

如果有人需要一个完整的解决方案来使用 RxJava2 在 Activity 之间发送数据

1- 创建总线:

public final class RxBus {

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


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

2-发件人 Activity

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

3-接收者 Activity

    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-取消订阅以避免内存泄漏:

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

关于android - 如何在 android 中使用 RxJava 在 Activity 之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39620107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com