本文不分析操作符的使用方法,主要分析interval轮询中如何来停止。
最近在项目中使用RxJava,RxAndroid;主要运用于网络请求,但是项目中有用到定时任务,每隔20s去更新数据,因此想到RxJava中有定时器操作符,再加上已经引入RxJava,链式请求就完成了,详见代码:
Observable.interval(0, 20, TimeUnit.SECONDS)
.doOnSubscribe {
mDisposable = it
}
.flatMap {
return@flatMap DataUtils.API_SERVICE.getQrCode(userId)
}
.map {
val body = it.string()
val str = body.substring(body.indexOf(",") + 1)
val decodedString = Base64.decode(str, Base64.DEFAULT)
return@map BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size)
}
.compose(ThreadFromUtils.defaultSchedulers())
.subscribe({
dismissProgressDialog()
qr_code.setImageBitmap(it)
}, {
dismissProgressDialog()
var msg = when (it) {
is SocketTimeoutException -> "网络连接超时!"
is ConnectException -> "连接不上服务器,请检查网络链接!"
is IOExcept