rxjava2定時器每秒請求一次資料
阿新 • • 發佈:2019-01-26
專案進行的過程中有個需求是在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)
}
})
}
}