rxjava2定时器每秒请求一次数据

项目进行的过程中有个需求是在20秒内每秒请求一次数据,请求成功的json中有个字段,如果有这个字段代表请求成功,如果没有则继续请求,直到20秒结束,20秒结束则失败

本来最开始采用countDownTimer来做,很简单就搞定了,但是项目引进了rxjava,那肯定得用rxjava试一试啊
好东西不能错过
直接上代码,并不难

class FourthActivity : BaseTitleActivity() {
    private var mDisposable: Disposable? = null
    private var flag: Boolean = false
    private var count: Long = 0

    override fun getChildView() = R.layout.act_four

    override fun initData() {
        requestDataByNet()
    }

    private fun requestDataByNet() {
        Observable.interval(0, 1, TimeUnit.SECONDS)//设置0延迟,每隔一秒发送一条数据
                .take(20)//设置截取前20次
                .doOnSubscribe(object : Consumer<Disposable> {
                    override fun accept(t: Disposable?) {
                        this@FourthActivity.mDisposable = t
                    }
                })
                .flatMap(object : Function<Long, Observable<TaoBao>> {
                    override fun apply(t: Long): Observable<TaoBao> {
                        count = t
                        //请求数据的操作
                        return RetrofitFactory
                                .getInstance()
                                .taobao("http://baobab.kaiyanapp.com/api/v4/rankList")
                    }

                })
                .compose(compose(this.bindToLifecycle<TaoBao>()))
                .subscribe(object : BaseObserver<TaoBao>() {
                    override fun onHandleSuccess(t: TaoBao?) {
                        if (count == 10L) {//模拟获取到该字段数据
                            flag = true
                            if (flag) {
                                mDisposable?.dispose()
                            }
                        }
                        if (count == 19L) {
                            showToastBottom("获取数据失败")
                        }
                        showToastBottom("成功=" + count)
                    }

                })


    }
}

猜你喜欢

转载自blog.csdn.net/villa_mou/article/details/78902124