[英]RxJava: How to prepend startWith() default emit EVERY TIME parent observable emits?
[英]RxJava - emit an observable every second
我正在使用RxJava在Android中制作計時器。 我需要在RxJava中創建一個計時器,每秒發出一個可觀察量。 我嘗試過以下但沒有運氣。 對我做錯了什么的想法?
Observable.interval(1000L, TimeUnit.MILLISECONDS)
.timeInterval()
.observeOn(AndroidSchedulers.mainThread())
.subscribe({Log.d(LOG_TAG, "&&&& on timer") })
您的代碼似乎沒有被調用。 檢查是否執行以及何時執行。 在使用Observable
,它是完全正確的。
例如,我將您的代碼段放在我的MainActivity
onCreate(...)
中:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Observable.interval(1000L, TimeUnit.MILLISECONDS)
.timeInterval()
.observeOn(AndroidSchedulers.mainThread())
.subscribe { Log.d("tag", "&&&& on timer") }
// ...
}
它有效:
此外,您可能不需要.timeInterval()
因為Observable.interval(...)
本身會以指定的速率發出連續數字,而.timeInterval()
只是將其轉換為發出排放之間經過的時間間隔。
在subscribe()
您不使用timeInterval()
運算符返回的longTimeInterval
對象。
正確版本:
.subscribe(longTimeInterval -> {
Log.d(LOG_TAG, "&&&& on timer");
}
另外我認為你根本不需要timeInterval()
運算符。 Observable.interval()
會在你的情況下每秒發出一個observable,我想這就是你想要的。 timeInterval()
將它轉換為一個可以保存兩個事件之間確切時間差的observable,我懷疑你是否需要它。
在Kotlin&RxJava 2.0.2中,只需定義一個帶有initialDelay
0和period
1的Observable Interval,它將每秒發出一個列表項。
val list = IntRange(0, 9).toList()
val disposable = Observable
.interval(0,1, TimeUnit.SECONDS)
.map { i -> list[i.toInt()] }
.take(list.size.toLong())
.subscribe {
println("item: $it")
}
Thread.sleep(11000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.