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

我正在用RxJava在Android中制作一个计时器。我需要在RxJava中制作一个计时器,以便每秒发出一个可观察的信号。我试过以下方法,但没有成功。有没有想过我做错了什么

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()