美文网首页
RxJava2实际项目应用案例(一)--- 获取验证码按钮倒计

RxJava2实际项目应用案例(一)--- 获取验证码按钮倒计

作者: 眺望天空 | 来源:发表于2019-06-18 23:15 被阅读0次

    此系列的文章将会给大家带来有关于RxJava2在项目中常用的场景案例。

    在项目中经常会用到获取验证码的场景,通常发送一次验证码后,需要间隔60秒才可以再次点击按钮获取验证码,那如何实现呢,请看以下示例。

    为了演示方便,字符串直接写在了代码里,按钮背景颜色没有用选择器,在实际项目中不建议这么做,在此只为演示方便。
    后续补充gif图。

    package com.gobagou.rxjava2javademo;
    
    import android.graphics.Color;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    import java.util.concurrent.TimeUnit;
    
    import io.reactivex.Observable;
    import io.reactivex.Observer;
    import io.reactivex.android.schedulers.AndroidSchedulers;
    import io.reactivex.disposables.Disposable;
    import io.reactivex.functions.Consumer;
    import io.reactivex.functions.Function;
    
    
    public class Rxjava2BtnActivity extends AppCompatActivity {
    
        private static final String TAG = "Rxjava2BtnActivity";
        private Button mBtn;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_rxjava2_btn);
    
            mBtn = findViewById(R.id.sent_btn);
        }
    
        public void click(View view) {
    
            final int count = 60;
            Observable.interval(0, 1, TimeUnit.SECONDS)
                    .take(count + 1)
                    .map(new Function<Long, Long>() {
                        @Override
                        public Long apply(Long aLong) throws Exception {
                            return count - aLong;
                        }
                    })
                    .observeOn(AndroidSchedulers.mainThread())
                    .doOnSubscribe(new Consumer<Disposable>() {
                        @Override
                        public void accept(Disposable disposable) throws Exception {
                            mBtn.setEnabled(false);
                            mBtn.setBackgroundColor(Color.GRAY);
                        }
                    })
                    .subscribe(new Observer<Long>() {
                        @Override
                        public void onSubscribe(Disposable d) {
    
                        }
    
                        @Override
                        public void onNext(Long aLong) {
                            mBtn.setText("剩余" + aLong + "秒");
                        }
    
                        @Override
                        public void onError(Throwable e) {
                            e.printStackTrace();
                        }
    
                        @Override
                        public void onComplete() {
                            mBtn.setEnabled(true);
                            mBtn.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                            mBtn.setText("发送数据");
                        }
                    });
    
        }
    }
    

    相关文章

      网友评论

          本文标题:RxJava2实际项目应用案例(一)--- 获取验证码按钮倒计

          本文链接:https://www.haomeiwen.com/subject/zkoqqctx.html