1. 程式人生 > >rxjava2定時器每秒請求一次資料

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) } }) } }