美文网首页
RxJava实现验证码倒计时

RxJava实现验证码倒计时

作者: 戏子戏戏子 | 来源:发表于2019-04-18 15:14 被阅读0次

    之前写发送验证码倒计时功能时都是自定义的CountdownView,最近想用RxJava实现以下,就当做个简单得小记录!

    ```

    private fun initSendMsg() {

        val timer:TextView = findViewById(R.id.sendCode)

        var mSubscription:Subscription?= null // Subscription 对象,用于取消订阅关系,防止内存泄露

    //开始倒计时,用 RxJava2 实现

        val count = 59L

        Flowable.interval(0, 1, TimeUnit.SECONDS) //设置0延迟,每隔一秒发送一条数据

                .onBackpressureBuffer() //加上背压策略

                .take(count) // 设置循环次数

                .map { aLong ->

                    count - aLong

                }

                .observeOn(AndroidSchedulers.mainThread())

                .subscribe(object :Subscriber<Long> {

                    override fun onComplete() {

                        timer.text = "点击重发"

                        timer.isEnabled = true

                        timer.setTextColor(Color.parseColor("#FFF5721E"))

                        mSubscription?.cancel() //取消订阅,防止内存泄漏

                    }

                    override fun onNext(t:Long?) {

                        timer.text = "${t}s" //接受到一条就是会操作一次UI

                        timer.setTextColor(Color.parseColor("#FF333333"))

    }

                    override fun onError(t:Throwable?) {

                        t?.printStackTrace()

    }

                    override fun onSubscribe(s:Subscription?) {

                        timer.isEnabled = false //在发送数据的时候设置为不能点击

                        timer.setTextColor(Color.parseColor("#0cFFFFFF")) //背景色设为灰色

                        mSubscription = s

                        s?.request(Long.MAX_VALUE) //设置请求事件的数量,重要,必须调用

                    }

    })

    }

    ```

    相关文章

      网友评论

          本文标题:RxJava实现验证码倒计时

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