java - rxjava PublishSubject 第二次不订阅
问题描述
private static PublishSubject<UserBean> mPublishSubject;
private static AtomicBoolean mRefreshing = new AtomicBoolean(false);
private static Observable<UserBean> mTokenObservable;
public Observable<UserBean> getNetTokenLocked() {
if (mRefreshing.compareAndSet(false, true)) {
Log.e(TAG, "first request");
mTokenObservable.subscribe(mPublishSubject);
} else {
Log.e(TAG, "else wait back");
}
return mPublishSubject; //second didn't return
}
返回 mPublishSubject;<- 我希望能够第二次给我以前的数据
解决方案
Publish Subject在订阅时发出源 Observable 的所有后续项。如果您想发出源 Observable 的所有项目,无论订阅者何时订阅,请使用 Replay Subject。
PublishSubject<Integer> source = PublishSubject.create();
// It will get 1, 2, 3, 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will get 4 and onComplete for second observer also.
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();
推荐阅读
- ubuntu - 无法在 sonarqube 中创建质量配置文件(JS 错误)
- php - 添加额外条件检查时的 SQL 查询语法
- php - 如何在 laravel 5.2 中使用前缀
- c++ - 如何实现 ParaUnity 插件?
- javascript - DIV 用作 INPUT 时的 JSON 解析错误
- angular - Angular 6,RxJS 返回未定义的对象
- jsp - JQgrid导出延迟加载数据
- html - 如何在 HTML、CSS 中将项目符号和垂直线绘制到列表项中
- android - 使用 camera2 API 捕获 Android ISO、曝光、光圈
- c# - 根据服务器负载为异步线程启动添加延迟