gpt4 book ai didi

java - 如何使用 ConnectableObservable 预取然后将处理后的数据用于不同的订阅者

转载 作者:行者123 更新时间:2023-12-01 20:03:13 24 4
gpt4 key购买 nike

在我的应用程序中,我需要在应用程序启动后立即加载大量数据。另外,当数据加载到某些 fragment/Activity 中时,我需要接收一个事件。

我正在使用 RxJava ConnectableObservable 来实现此目的。我使用了 replay() 因为我需要为多个订阅者提供相同的数据。

伪代码:

 Observable.create(emitter -> {
try {
Data next = getDataFromDb();
emitter.onNext(next);
emitter.onCompleted();
} catch (SQLiteException e) {
emitter.onError(e);
}
}, Emitter.BackpressureMode.BUFFER)
.toList()
.compose(applySchedulers())
.replay()

现在,如果我想预取数据,我应该在应用程序类中订阅,然后在 Activity/Fragment 中使用 connect() 吗?

最佳答案

试试这个:

observable = Observable.create(emitter -> {
try {
Data next = getDataFromDb();
emitter.onNext(next);
} catch (SQLiteException e) {
emitter.onError(e);
}
}, Emitter.BackpressureMode.BUFFER)
.toList()
.compose(applySchedulers())
.replay(1)
.autoConnect()
//start your prefetch
observable.subscribe()//you should better add some log to see the process

//In your Activity
observable.subscribe(/**Your Subscribe**/)// here you will get the replayed value

请注意:

  1. 您应该保留 Observable 的相同实例,否则您无法获取重放值

  2. 您应该使用 autoConnect() 的其他重载例如autoConnect(int numberOfSubscribers, @NonNull Consumer<? super Disposable> connection)并获取上游源的一次性(RxJava 1.x 订阅)。

关于java - 如何使用 ConnectableObservable 预取然后将处理后的数据用于不同的订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47768426/

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