android - Logcat 和 toast 的 RxJava onNext 方法

标签 android multithreading observable rx-java reactive-programming

我是 RxJava 新手。

我正在依靠在线资源并实现它。 我正在尝试编写非常简单的代码,但遇到了一些问题。

var animalobservable: Observable<String> = Observable.just("Ant", "Bee", "Cat", "Dog", "Fox")
var animalObserver: Observer<String> = getAnimalObserver()

animalobservable
    .subscribeOn(Schedulers.trampoline())
    .debounce(3, TimeUnit.SECONDS)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(animalObserver)

我在 onNext 方法中做了一些事情。

private fun getAnimalObserver(): Observer<String> {
    return object : Observer<String> {
        override fun onSubscribe(d: Disposable) {
            Log.d("OnSubscibe", "onSubscribe")
        }

        override fun onNext(s: String) {
            Log.d("OnNext", "Name: $s")
            Toast.makeText(context, "Name : $s", Toast.LENGTH_SHORT).show()
        }

        override fun onError(e: Throwable) {
            Log.e("OnError", "onError: " + e.message)
        }

        override fun onComplete() {
            Log.d("OnComplete", "All items are emitted!")
        }
    }
}

我的问题是当我将一些代码打印到 Logcat 中时它工作正常。数据一一正确发出。

但是当我烤它而不是 Logcat 时,它只发出最后一个数据“fox”。

我想知道 toast 和 logcat 出了什么问题。我假设它是由于线程而发生的,但我不明白为什么会发生。

提前致谢..!

最佳答案

您可以看到最后一个 Toast,因为 Toast 立即按顺序显示并且彼此时间相同,只有我们可以看到最后一个 Toast。

但是如果您想在每个发射项之间添加延迟,请将 animalobservable 与具有间隔的可观察量连接起来,如下所示:

 animalobservable
        .subscribeOn(Schedulers.trampoline())
        .concatMap { animal ->
            Observable.interval(3, TimeUnit.SECONDS).take(1)
                .map { animal }
        }
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(animalObserver)

关于android - Logcat 和 toast 的 RxJava onNext 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54623878/

相关文章:

java - 插入 System.out.println 调用会影响竞争条件 : how to debug?

java - 是否值得清理 Filter 中的 ThreadLocals 来解决与线程池相关的问题?

java - Rx-Java:创建可配置的 Observable

Android SharePreferences 一般问题

android - 如何制作启用单点登录的 facebook 应用程序?

安卓:找不到资源

angular - 未调用 RxJS5 finalize 运算符

android - 在 OnPause() 中检测屏幕方向变化

java - 说明 volatile : is this code thread-safe?

java - 观察者的构造函数是否需要 Observable 作为参数?