RxBinding的使用案例

版权声明:天际流火叩响大地之门,岁月星辰刻画沧桑年轮! https://blog.csdn.net/ytfunnysite/article/details/82500735

点击事件:

       RxView.clicks(btnStopService)
                .throttleFirst(2, TimeUnit.SECONDS)
                .subscribe(new Consumer<Object>() {
                    @Override
                    public void accept(Object o) {
                        stopService(new Intent(context, MyService.class));
                        showToast("关闭Service服务");
                        Log.d(TAG, "accept: 关闭Service服务");
                    }
                });

表单验证(账号密码同时验证)

 Observable.combineLatest(RxTextView.textChanges(editName).map(new Function<CharSequence, String>() {
            @Override
            public String apply(CharSequence charSequence) throws Exception {
                return String.valueOf(charSequence.toString());
            }
        }), RxTextView.textChanges(editPwd).map(new Function<CharSequence, String>() {
            @Override
            public String apply(CharSequence charSequence) throws Exception {
                return String.valueOf(charSequence);
            }
        }), new BiFunction<String, String, Boolean>() {
            @Override
            public Boolean apply(String s, String s2) {
                return isNameValid(s)&&isPwdValid(s2);
            }
        }).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean aBoolean) throws Exception {
                if (aBoolean){
                    btn1.setEnabled(true);
                    RxView.clicks(btn1).subscribe(new Consumer<Object>() {
                        @Override
                        public void accept(Object o) {
                            showToast("Login Success");
                        }
                    });
                }else {
                    showToast("Login Fail");
                }
            }
        });

倒计时获取验证码

 verifyCodeObservable=RxView.clicks(btnGetCode)
                .throttleFirst(SECOND,TimeUnit.SECONDS)//20内只允许点击一次,防止抖动
                .subscribeOn(AndroidSchedulers.mainThread())
                .doOnNext(new Consumer<Object>() {
                    @Override
                    public void accept(Object o) {
                        try {
                            RxView.enabled(btnLogin).accept(false);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
        verifyCodeObservable.subscribe(new Consumer() {
            @Override
            public void accept(Object o) throws Exception {
                Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
                        .take(20)//设置上限20次
                        .subscribe(new Observer<Long>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Long value) {
                                try {
                                    RxTextView.text(btnGetCode).accept("剩余 "+(SECOND-value)+"秒" );
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }


                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {
                                try {
                                    RxTextView.text(btnGetCode).accept("再次获取验证码");
                                    RxView.enabled(btnLogin).accept(true);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }


                            }
                        });

            }
        });

    }

    private Toast mToast;

    protected void showToast(String desc) {
        if (mToast == null) {
            mToast = Toast.makeText(this.getApplicationContext(), desc, Toast.LENGTH_SHORT);
        } else {
            mToast.setText(desc);
        }
        mToast.show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        verifyCodeObservable.unsubscribeOn(AndroidSchedulers.mainThread());//防止泄露
    }
}

猜你喜欢

转载自blog.csdn.net/ytfunnysite/article/details/82500735