首页 > 解决方案 > 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;<- 我希望能够第二次给我以前的数据

标签: javarx-java2

解决方案


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

推荐阅读