RXJava ...每秒发射一次可观测的数据

RXJava ...每秒发射一次可观测的数据

问题描述:

我使用RXJava在Android中制作一个计时器...我需要在RXJava中制作一个计时器,每秒发射一次可观测数据。我尝试了以下...但没有运气。有什么想法我做错了什么?RXJava ...每秒发射一次可观测的数据

Observable.interval(
      1000L, 
      TimeUnit.MILLISECONDS) 
      .timeInterval() 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe({Log.d(LOG_TAG, "&&&& on timer") }) 

您的代码似乎不被调用。检查它是否被执行以及何时执行。至于与Observable合作,这是完全正确的。

例如,我把你的代码片段里面我MainActivityonCreate(...)

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    Observable.interval(1000L, TimeUnit.MILLISECONDS) 
      .timeInterval() 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe { Log.d("tag", "&&&& on timer") } 
    // ... 
} 

而且它的工作原理:

https://www.dropbox.com/s/jxkm5ol8l5idyji/observable_interval.png?dl=0

另外,也许你并不需要.timeInterval()因为Observable.interval(...)自身发出指定速率内的连续数字,并且.timeInterval()只是将其转换为发出排放之间所经过的时间间隔。

+0

我不需要.timeInterval():)我删除它,但仍然无效:/ – fergdev

在你subscribe()你并不会消耗年代由timeInterval()运算符的longTimeInterval对象。

正确的版本:

.subscribe(longTimeInterval -> { 
    Log.d(LOG_TAG, "&&&& on timer"); 
} 

此外我认为你不需要timeInterval()运营商都没有。 Observable.interval()会在你的情况下每秒钟发出一个可观察的数据,我猜是你想要的。 timeInterval()转换为可观察到的两个事件之间的确切时间差发生,我怀疑你会需要。

+3

Kotlin在单参数的情况下不需要lamda参数声明,所以这不是问题。 '.subscribe {Log.d(...)}'在Kotlin中的RxJava用法是正确的。 – hotkey

+0

好的,谢谢你指出!不久就要看Kotlin :) – Vesko