RxJava - 每秒发出一个 observable
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") })
在您的 subscribe()
中,您不使用 timeInterval()
运算符返回的 longTimeInterval
对象。
正确版本:
.subscribe(longTimeInterval -> {
Log.d(LOG_TAG, "&&&& on timer");
}
此外,我认为您根本不需要 timeInterval()
运算符。 Observable.interval()
将在您的情况下每秒发出一个可观察的,我想这就是您想要的。 timeInterval()
将其转换为一个包含两个事件发生之间确切时间差的可观察对象,我怀疑您是否需要它。
你的代码似乎没有被调用。检查它是否执行以及何时执行。在使用 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()
只是将其转换为发出之间经过的时间间隔排放量。
在 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)
我正在使用 RxJava 在 Android 中制作一个计时器。我需要在 RxJava 中制作一个计时器,每秒发出一个可观察到的值。我尝试了以下但没有运气。对我做错了什么有什么想法吗?
Observable.interval(1000L, TimeUnit.MILLISECONDS)
.timeInterval()
.observeOn(AndroidSchedulers.mainThread())
.subscribe({Log.d(LOG_TAG, "&&&& on timer") })
在您的 subscribe()
中,您不使用 timeInterval()
运算符返回的 longTimeInterval
对象。
正确版本:
.subscribe(longTimeInterval -> {
Log.d(LOG_TAG, "&&&& on timer");
}
此外,我认为您根本不需要 timeInterval()
运算符。 Observable.interval()
将在您的情况下每秒发出一个可观察的,我想这就是您想要的。 timeInterval()
将其转换为一个包含两个事件发生之间确切时间差的可观察对象,我怀疑您是否需要它。
你的代码似乎没有被调用。检查它是否执行以及何时执行。在使用 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()
只是将其转换为发出之间经过的时间间隔排放量。
在 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)