微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android-如何在RxJava中链接任务

正在进行android应用程序注册,在该应用程序中,我需要一个一个地执行几个任务

任务1
任务2
任务3

我想将这些任务一个一个链接起来,如果一个任务失败,则整个过程应该失败.

我想通过Rxjava解决此问题,谁能告诉我如何使用rxJava实现此问题.

(我已经浪费了5个小时,但是在RxJava中也找不到新手的解决方案)

我尝试过的

Observable.merge(task1,task2,task3).subscribe(new Observer<DataError>() {
            @Override
            public void onSubscribe(disposable d) {

            }

            @Override
            public void onNext(DataError dataError) {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
             //this method is not called by rxJava
            }
        });

使用此方法,一切正常,但是rxJava不会调用onComplete()方法.

请帮忙〜

编辑-
每个任务都取决于先前的任务结果.一次应有一个任务.

最佳答案
假设我们有3个任务.从给定的整数数组中,找到偶数,将每个偶数乘以10,将每个数除以2

//A stream of observable to find even numbers
private Observable<Integer> findEven(Integer number) {
    return Observable
        .just(number)
        .filter(data -> data % 2 == 0);
}

//A stream of observable to multiply each number with 10
private Observable<Integer> multiplyBy10(Integer evennumber) {
    return Observable.just(evennumber).map(data -> data * 10);
}

//A stream of observable to divide each number with 2
private Observable<Integer> divideBy2(Integer evennumber) {
    return Observable.just(evennumber).map(data -> data / 2);
}

那么,我们如何链接此任务?

Observable
    .just(1,2,3,4,5,6,7,8)
    //find even numbers
    .flatMap(num -> findEven(num))
    //Now multiply each even number by 10
    .flatMap(num -> multiplyBy10(num))
    //Now to each number divide 2 
    .flatMap(num -> divideBy2(num))
    .subscribe(
        // result: 10,20,30,40
        result -> Log.v("","result: " + result),error -> Log.e("",error.getMessage())
    );

希望这可以帮助.

原文地址:https://www.jb51.cc/android/531389.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐