Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx Java zip在任何主题完成时完成_Java_Android_Rx Java_Observable_Rx Android - Fatal编程技术网

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可能的副本