RxJava实际应用--->合并数据源&同时展示


1.需求场景

同时向2个数据源获取数据,然后合并数据,同意展示到客户端。

2.具体实现

我们可以利用操作符Merge和zip实现上面的需求。

  • 使用merge()操作符
        Observable network = Observable.just("网络");

        Observable file = Observable.just("本地文件");

        Observable.merge(network, file)
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(String value) {
                        Log.d(Constant.TAG, "数据源有:" + value);
                        result += value + "+";
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {
                        Log.d(Constant.TAG, "获取数据完成");
                        Log.d(Constant.TAG, result);
                    }
                });

log信息:

07-03 13:20:19.346 11935-11935/com.gjj.frame D/RxJava: 数据源有:网络
07-03 13:20:19.346 11935-11935/com.gjj.frame D/RxJava: 数据源有:本地文件
07-03 13:20:19.346 11935-11935/com.gjj.frame D/RxJava: 获取数据完成
07-03 13:20:19.347 11935-11935/com.gjj.frame D/RxJava: 数据源来自 = 网络+本地文件+
  • 使用zip()操作符
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(UrlManager.BASE_URL_JS)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        RequestApi request = retrofit.create(RequestApi.class);

        observable1 = request.getCall().subscribeOn(Schedulers.io());
        observable2 = request.getCall_2().subscribeOn(Schedulers.io());

        Observable.zip(observable1, observable2,
                new BiFunction() {
            @Override
            public String apply(TranslationBean translationBean, TranslationBean1 translationBean1) throws Exception {
                return translationBean.getContent().getOut() + " & " + translationBean1.getContent().getOut();
            }
        })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(String s) throws Exception {
                        Log.d(Constant.TAG,"最终接收到的数据是:"+s);
                    }
                }, new Consumer() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Logger.d("获取失败");
                    }
                });

log信息:

07-03 13:21:36.981 12172-12172/com.gjj.frame D/RxJava: 最终接收到的数据是:嗨世界 & hi china

参考文章:

  • Android RxJava 实际应用讲解:合并数据源 & 同时展示

你可能感兴趣的:(RxJava实际应用--->合并数据源&同时展示)