RxJava-每秒发出一个可观察到的
我正在用RxJava在Android中制作一个计时器。我需要在RxJava中制作一个计时器,以便每秒发出一个可观察的信号。我试过以下方法,但没有成功。有没有想过我做错了什么RxJava-每秒发出一个可观察到的,java,android,system.reactive,rx-java,kotlin,Java,Android,System.reactive,Rx Java,Kotlin,我正在用RxJava在Android中制作一个计时器。我需要在RxJava中制作一个计时器,以便每秒发出一个可观察的信号。我试过以下方法,但没有成功。有没有想过我做错了什么 Observable.interval(1000L, TimeUnit.MILLISECONDS) .timeInterval() .observeOn(AndroidSchedulers.mainThread()) .subscribe({Log.d(LOG_TA
Observable.interval(1000L, TimeUnit.MILLISECONDS)
.timeInterval()
.observeOn(AndroidSchedulers.mainThread())
.subscribe({Log.d(LOG_TAG, "&&&& on timer") })
在subscribe()
中,不使用timeInterval()
操作符返回的longtimeeval
对象
正确版本:
.subscribe(longTimeInterval -> {
Log.d(LOG_TAG, "&&&& on timer");
}
另外,我认为您根本不需要
timeInterval()
操作符Observable.interval()
将在您的情况下每秒发出一个Observable,我猜这就是您想要的timeInterval()
将其转换为一个可观测值,该值保存两个事件发生之间的确切时间差,我怀疑您是否需要该值。您的代码似乎没有被调用。检查是否执行以及何时执行。在使用可观察的时,它是完全正确的
例如,我将您的代码片段放在我的main活动的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()
,因为可观察.interval(…)
本身在指定的速率内发出序列号,而.timeInterval()
只需将其转换为发射两次发射之间经过的时间间隔。在Kotlin&RxJava 2.0.2中,只需定义一个可观察的间隔,该间隔具有初始延迟
0和周期
1,它将每秒发射列表项
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)
Kotlin在单个参数的情况下不需要lamda参数声明,所以这不是问题所在.subscribe{Log.d(…)}
在Kotlin中是正确的RxJava用法。很好,谢谢您指出!很快就要查看Kotlin:)我不需要.timeInterval():)我删除了它,但仍然不起作用:/当我使用它时,我得到了一个lint错误:缺少一次性文件handling@KaranSharma,您可以将其包装为一次性,这意味着您可以编写类似于disposable=Observable.interval()的内容..
然后在活动存储中使用一次性.dispose()