如何获得第一个元素没有任何延迟和延迟从第二个元素?

时间:2018-03-28 06:25:30

标签: android kotlin rx-java

 fun initScreenSaver(){
       Observable.fromCallable({GetScreenSaverUrlInteractor().execute() })
               .flatMapIterable{ urls-> urls }
               .zipWith(Observable.interval(10, TimeUnit.SECONDS), { item, interval -> item })
               .observeOn(AndroidSchedulers.mainThread())
               .subscribe(object : Subscriber<String>(){
                   override fun onNext(url: String?) {
                      view.loadImage(url)
                   }

                   override fun onCompleted() {
                       initScreenSaver()
                   }

                   override fun onError(e: Throwable?) {
                       TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                   }

               })
   }

这里我试图让元素延迟10秒并加载到ImageView中。但是第一个元素应该立即出现。

1 个答案:

答案 0 :(得分:2)

[ { "hour_selected":"08:00:00" }, { "hour_selected":"09:00:00" }, { "hour_selected":"10:00:00" }, { "hour_selected":"11:00:00" }, { "hour_selected":"12:00:00" }, { "hour_selected":"13:00:00" } ] 有一个签名:

Observable.interval()

你可以像这样使用它:

Observable<Long> interval(long initialDelay, long period, TimeUnit unit)

<强> UPD

Observable.interval(0, 10, TimeUnit.SECONDS)

输出:

Observable.just ( listOf("Elem1", "Elem2", "Elem3", "Elem4") )
    .flatMapIterable{ urls -> urls }
    .zipWith<Long, String>(Observable.interval(0, 10, TimeUnit.SECONDS), BiFunction { t1, t2 ->  t1})
    .observeOn(AndroidSchedulers.mainThread())
    .doOnSubscribe { Log.d("DEBUG", "Start emitting")}
    .subscribe{Log.d("DEBUG", "item: $it")}