RxJava2 学习

参考:RxJava2 只看这一篇文章就够了

private void showLoginDialog() {
        try {
            Log.d(TAG, "showLoginDialog");
            showLoading();
            Observable.create(new ObservableOnSubscribe<QrParams>() {
                @Override
                public void subscribe(@io.reactivex.annotations.NonNull ObservableEmitter<QrParams> emitter) throws Exception {
                    JsonObject data = new JsonObject();
                    data.addProperty("app", "gnetlink");
                    data.addProperty("service", "identity");
                    data.addProperty("action", "login");
                    //data.addProperty("uid", "");
                    String encryptData = QrCodeUtils.encryptQrData(data);
                    if (TextUtils.isEmpty(encryptData)) {
                        LogUtils.e(TAG, "encryptData is empty");
                        emitter.onError(new Exception("encryptData is empty"));
                    }
                    emitter.onNext(new QrParams(QrCodeUtils.QrType.LOGIN, encryptData));
                    emitter.onComplete();
                }
            }).flatMap(new Function<QrParams, ObservableSource<QrEntity>>() {
                @Override
                public ObservableSource<QrEntity> apply(@io.reactivex.annotations.NonNull QrParams qrParams) throws Exception {
                    return HttpUtils.getInstance().create(EasService.class).qrCode(qrParams);
                }
            }).map(new Function<QrEntity, Bitmap>() {
                @Override
                public Bitmap apply(@io.reactivex.annotations.NonNull QrEntity response) throws Exception {
                    logonUrl = response.getUrl();
                    logonUrl = removeParamFromUrl(logonUrl, "validTime") + "&type=ef1e_login";
                    LogUtils.stack(TAG, "url:" + logonUrl);
                    return QrCodeUtils.syncEncodeQRCode(logonUrl, mContext.getResources().getDimensionPixelSize(R.dimen.user_res_qr_code_size), QrCodeUtils.Type.LOGIN);
                }
            }).subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())  //下游方法主线程执行
                    .subscribe(new DefaultObserver<Bitmap>() {
                        @Override
                        public void onNext(Bitmap bitmap) {
                            LogUtils.d(TAG, "getLoginQrCode onNext, bitmap: " + bitmap);
                            hideLoading();
                            showQrCodeResult(bitmap);
                        }

                        @Override
                        public void onError(Throwable throwable) {
                            throwable.printStackTrace();
                            LogUtils.e(TAG, "getLoginQrCode onError " + throwable.getMessage());
                            hideLoading();
                            showQrCodeResult(null);
                        }

                        @Override
                        public void onComplete() {

                        }
                    });

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

posted @ 2018-05-11 14:45  随易来了  阅读(106)  评论(0编辑  收藏  举报