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

2019-06-18  本文已影响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("发送数据");
                    }
                });

    }
}
上一篇下一篇

猜你喜欢

热点阅读