如何在Android RxJava Observable中顺序运行2个查询? [英] How to run 2 queries sequentially in a Android RxJava Observable?

查看:1384
本文介绍了如何在Android RxJava Observable中顺序运行2个查询?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想运行2个异步任务,一个异步任务(依次).我已经读过有关ZIP或Flat的内容,但是我不太了解...

I want to run 2 asynchronous tasks, one followed by the other (sequentially). I have read something about ZIP or Flat, but I didn't understand it very well...

我的目的是从本地SQLite加载数据,完成后它将调用查询到服务器(远程).

My purpose is to load the data from a Local SQLite, and when it finishes, it calls the query to the server (remote).

有人可以建议我,实现这一目标的方法吗?

Can someone suggests me, a way to achieve that?

这是我正在使用的RxJava Observable框架(单个任务):

This is the RxJava Observable skeleton that I am using (single task):

    // RxJava Observable
    Observable.OnSubscribe<Object> onSubscribe = subscriber -> {
        try {

            // Do the query or long task...

            subscriber.onNext(object);
            subscriber.onCompleted();
        } catch (Exception e) {
            subscriber.onError(e);
        }
    };

    // RxJava Observer
    Subscriber<Object> subscriber = new Subscriber<Object>() {
        @Override
        public void onCompleted() {
            // Handle the completion
        }

        @Override
        public void onError(Throwable e) {
            // Handle the error
        }

        @Override
        public void onNext(Object result) {

          // Handle the result

        }
    };

    Observable.create(onSubscribe)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(subscriber);

推荐答案

要执行此操作的操作员为merge,请参见 http://reactivex.io/documentation/operators/merge.html .

The operator to do that would be merge, see http://reactivex.io/documentation/operators/merge.html.

我的方法是创建两个可观察对象,例如observableLocalobservableRemote,然后合并输出:

My approach would be to create two observables, let's say observableLocal and observableRemote, and merge the output:

Observable<Object> observableLocal = Observable.create(...)
Observable<Object> observableRemote = Observable.create(...)
Observable.merge(observableLocal, observableRemote)
          .subscribe(subscriber)

如果要确保在本地后运行远程,可以使用concat.

If you want to make sure that remote is run after local, you can use concat.

这篇关于如何在Android RxJava Observable中顺序运行2个查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆