2016-02-28 121 views
2

我使用RXJava在Android中製作一個計時器...我需要在RXJava中製作一個計時器,每秒發射一次可觀測數據。我嘗試了以下...但沒有運氣。有什麼想法我做錯了什麼?RXJava ...每秒發射一次可觀測的數據

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

回答

11

您的代碼似乎不被調用。檢查它是否被執行以及何時執行。至於與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

0

在你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

相關問題