gpt4 book ai didi

android - 房间可流动缓存

转载 作者:搜寻专家 更新时间:2023-11-01 09:31:22 24 4
gpt4 key购买 nike

我正在使用带 RX 的 Room (1.0.0.rc1),我的 Dao 是这样定义的:

@Dao
interface AccountDao {
@Query("SELECT * FROM Account ORDER BY name")
fun all(): Flowable<List<Account>>
}

我是这样订阅的:

dao
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { accounts = it }

我在订阅flowable的代码中不止一处。第一个订阅的获取数据,其他的不获取。

我如何制作一个 Observable,它会在每次有人订阅时发出实际内容,并在数据更改时通知每个订阅者?

最佳答案

您可以使用 replay 在每次有人订阅时发出最新值。并使用 distinctUntilChanged 仅在数据更改时通知。

这是示例:

import io.reactivex.Observable;
import io.reactivex.subjects.BehaviorSubject;

public class Q47000608 {
public static void main(String[] args) {
BehaviorSubject<Integer> bs = BehaviorSubject.createDefault(1);
Observable<Integer> o = bs.replay(1).autoConnect().distinctUntilChanged();
o.subscribe(i -> System.out.println("s1 accept " + i));
bs.onNext(2);
o.subscribe(i -> System.out.println("s2 accept " + i));
o.subscribe(i -> System.out.println("s3 accept " + i));
bs.onNext(3);
o.subscribe(i -> System.out.println("s4 accept " + i));
bs.onNext(4);
}
}


并输出:

s1 accept 1
s1 accept 2
s2 accept 2
s3 accept 2
s1 accept 3
s2 accept 3
s3 accept 3
s4 accept 3
s1 accept 4
s2 accept 4
s3 accept 4
s4 accept 4

关于android - 房间可流动缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47000608/

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