Rx Java zip在任何主题完成时完成
我面临着这个问题。据我所知,Rx Java zip在任何主题完成时完成,java,android,rx-java,observable,rx-android,Java,Android,Rx Java,Observable,Rx Android,我面临着这个问题。据我所知,RxJava中的zip方法等待所有可观察到的结果完成 但我有另一种行为 这是我的代码片段 private PublishSubject<Void> firstSubject; private PublishSubject<Void> secondSubject; @Override protected void onCreate(Bundle savedInstanceState) { super.
RxJava
中的zip
方法等待所有可观察到的结果完成
但我有另一种行为
这是我的代码片段
private PublishSubject<Void> firstSubject;
private PublishSubject<Void> secondSubject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadData();
mDrawerHeaderView.postDelayed(new Runnable() {
@Override
public void run() {
// getSecondSubject().onNext(null);
}
}, 1000);
mDrawerHeaderView.postDelayed(new Runnable() {
@Override
public void run() {
getFirstSubject().onCompleted();
}
}, 1000);
}
protected PublishSubject<Void> createFirstSubject() {
firstSubject = PublishSubject.create();
return firstSubject;
}
protected PublishSubject<Void> createSecondSubject() {
secondSubject = PublishSubject.create();
return secondSubject;
}
protected PublishSubject<Void> getFirstSubject() {
return firstSubject;
}
protected PublishSubject<Void> getSecondSubject() {
return secondSubject;
}
private void loadData() {
Observable<Void> firstSubject = createFirstSubject();
Observable<Void> secondSubject = createSecondSubject();
Observable<Boolean> allDataTask = Observable.zip(firstSubject, secondSubject, new Func2<Void, Void, Boolean>() {
@Override
public Boolean call(Void aVoid, Void aVoid2) {
return true;
}
});
allDataTask
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
Notifications.showSuccessMessage(getApplicationContext(), "COMPLETE");
}
@Override
public void onError(Throwable e) {
Notifications.showErrorMessage(getApplicationContext(), "ERROR");
}
@Override
public void onNext(Boolean aBoolean) {
Notifications.showSuccessMessage(getApplicationContext(), "NEXT");
}
});
}
private PublishSubject firstSubject;
私人出版主体;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
loadData();
mDrawerHeaderView.postDelayed(新的Runnable(){
@凌驾
公开募捐{
//getSecondSubject().onNext(null);
}
}, 1000);
mDrawerHeaderView.postDelayed(新的Runnable(){
@凌驾
公开募捐{
getFirstSubject().onCompleted();
}
}, 1000);
}
受保护的PublishSubject createFirstSubject(){
firstSubject=PublishSubject.create();
返回第一个主题;
}
受保护的PublishSubject createSecondSubject(){
secondSubject=PublishSubject.create();
返回第二个主题;
}
受保护的PublishSubject getFirstSubject(){
返回第一个主题;
}
受保护的PublishSubject getSecondSubject(){
返回第二个主题;
}
私有void loadData(){
可观察的firstSubject=createFirstSubject();
可观察的secondSubject=createSecondSubject();
Observable allDataTask=Observable.zip(firstSubject、secondSubject、new Func2(){
@凌驾
公共布尔调用(Void aVoid、Void aVoid2){
返回true;
}
});
allDataTask
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
showSuccessMessage(getApplicationContext(),“COMPLETE”);
}
@凌驾
公共无效申报人(可丢弃的e){
Notifications.batherRorMessage(getApplicationContext(),“ERROR”);
}
@凌驾
public void onNext(布尔aBoolean){
showSuccessMessage(getApplicationContext(),“NEXT”);
}
});
}
在本例中,我收到了COMPLETE
消息,但我希望什么也得不到,因为第二个主题没有完成。
我做错了什么?
请帮助我获得想要的行为 是的,它有效。在这里接收
onCompleted()
非常有意义,因为如果一个流完成了,只要它发出的所有元素都是“压缩”的,就没有办法再“压缩”任何内容,所以它是“完成的”。您也可以玩序列。谢谢您的回答,您能提供示例如何使用Rx Java实现所需结果吗?请等待,直到所有请求都完成completed@user4598738请考虑使用FrkCube可能的副本