(三)RxJava 2常用オペレータmerge、flatmap、zip-MVPアーキテクチャと組み合わせて説明する

7012 ワード

効果図は以下の通りです.
demo3.gif
Demo3 1.merge適用シーン:複雑なページは一度に複数のインタフェースを呼び出す2.flatMapアプリケーションシーン:1つのインタフェース呼び出し時に別のインタフェースの戻り値に依存する、1つのインタフェース呼び出しが成功した後に2番目のインタフェースを呼び出すか、2番目のインタフェースがパラメータ呼び出しとして1番目のインタフェースの戻り値を必要とする.zipアプリケーションシーン:UIを表示するには、2つのインタフェースのデータが結合しています.
MVPコードによる実装
接続クラスcontact
public interface IDemo3Contract {
    interface View extends IView {
        void setData1(String rate);
        void setData2(List dataList);
        void setData3(String data3);
        void setData4(List dataList);

    }

    interface Presenter extends IPresenter {
        void getMergeData();
        void getFlatMapData(String type);
        void getZipData();

    }

    interface Model extends IModel {
        void getMergeData(Observer observer);
        void getFlatMapData(String type,Observer observer);
        void getZipData(Observer> observer);

    }
}

データ層Model
public class Demo3Model extends BaseModel implements IDemo3Contract.Model {

    @Override
    public void getMergeData(Observer observer) {
        NetApi netApi= NetClient.getInstance().getNetApi();
        Observable.merge(netApi.getInsureRate(),netApi.getGoodsType())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }

    @Override
    public void getFlatMapData(String type,Observer observer) {
        final NetApi netApi= NetClient.getInstance().getNetApi();
        netApi.getAgreementList(type)
                .flatMap(new Function>() {
                    @Override
                    public ObservableSource apply(TestBean4 testBean4)  throws Exception {
                        return netApi.getAgreementDetail(testBean4.getDate().get(0).getId());
                    }
                }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }

    @Override
    public void getZipData(Observer> observer) {
        NetApi netApi= NetClient.getInstance().getNetApi();
        Observable.zip(netApi.getAgreementList("    "), netApi.getGoodsType(), new BiFunction>() {
            @Override
            public List apply(TestBean4 testBean4, TestBean2 testBean2) throws Exception {
                //       
                List list=new ArrayList<>();
                List data1=testBean4.getDate();
                List data2=testBean2.getDate();
                for (int i = 0; i < data1.size(); i++) {
                    list.add(new TestBean5(data2.get(i).getName(),data1.get(i).getTitle(),data1.get(i).getAddtime()));
                }
                return list;
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }
}

ビジネスクラスpresenter
public class Demo3Presenter extends BasePresenter implements IDemo3Contract.Presenter {

    @Override
    protected IDemo3Contract.Model createModel() {
        return new Demo3Model();
    }

    @SuppressWarnings("unchecked")
    @Override
    public void getMergeData() {
        mView.showDialogLoading();
        mModel.getMergeData(new Observer() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Object o) {
                mView.dismissDialogLoading();
                if (o instanceof TestBean1) {
                    if (((TestBean1) o).getMsg().equals(Params.SUCCESS_MSG)) {
                        mView.setData1(((TestBean1) o).getDate().getProportion());
                    } else {
                        mView.showMessage(((TestBean1) o).getDescribe());
                    }
                } else if (o instanceof TestBean2) {
                    if (((TestBean2) o).getMsg().equals(Params.SUCCESS_MSG)) {

                        mView.setData2(((TestBean2) o).getDate());
                    } else {
                        mView.showMessage(((TestBean2) o).getDescribe());
                    }
                }
            }

            @Override
            public void onError(Throwable e) {
                mView.dismissDialogLoading();
                mView.errorDialog();
            }

            @Override
            public void onComplete() {
                mView.dismissDialogLoading();
            }
        });
    }

    @Override
    public void getFlatMapData(String type) {
        mView.showDialogLoading();
        mModel.getFlatMapData(type, new Observer() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(TestBean3 testBean3) {
                mView.dismissDialogLoading();
                if (testBean3.getMsg().equals(Params.SUCCESS_MSG)) {
                    mView.setData3(testBean3.getData().toString());
                }else {
                    mView.showMessage(testBean3.getDescribe());
                }
            }

            @Override
            public void onError(Throwable e) {
                mView.dismissDialogLoading();
                mView.errorDialog();
            }

            @Override
            public void onComplete() {
                mView.dismissDialogLoading();
            }
        });
    }

    @Override
    public void getZipData() {
        mView.showDialogLoading();
        mModel.getZipData(new Observer>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(List testBean5s) {
                mView.dismissDialogLoading();
               mView.setData4(testBean5s);
            }

            @Override
            public void onError(Throwable e) {
                mView.dismissDialogLoading();
                mView.errorDialog();
            }

            @Override
            public void onComplete() {
                mView.dismissDialogLoading();
            }
        });
    }
}


(一)ガウスファジイによる毛ガラス効果、共有要素アニメーション、アドレスセレクタ(二)京東頂部伸縮グラデーション、カスタムviewpagerインジケータ、viewpager 3 D回廊、recyclerview滝流(四)擬支付宝トップページ頂部伸縮スライド/中間層ドロップダウンブラシ新(五)TabLayout+ViewPager懸濁吸頂及びリフレッシュ数アニメーション表示(六)QQトップページdrawer/横滑り削除/浮動imgaeView/角標ドラッグ(7)微信を真似てモーメンツドラッグ削除を発表
更新を続ける..好きでも嫌いでも、一人で分かち合って、あなたを助けてほしい.
ソースアドレス:Github転送ゲート