我最近学习RxJava。我正在学习操作员。这是我的代码:
tvText = findViewById(R.id.tvText)
val observable2 = Observable.just(1, 2, 3, 4, 5, 6)
observable2.filter { i ->
//filter genap
i!!
i % 2 == 0
}
tvText.setOnClickListener {
observable2.subscribe(object: Subscriber<Int>() {
override fun onNext(t: Int?) {
Toast.makeText(this@MainActivity, t.toString(), Toast.LENGTH_SHORT).show()
}
override fun onError(e: Throwable?) {
e!!.printStackTrace()
}
override fun onCompleted() {
Toast.makeText(this@MainActivity, "Complete", Toast.LENGTH_SHORT).show()
}
})
}
问题是过滤器无法正常工作。吐司显示所有数字。我的代码有什么问题?
最佳答案
问题是您使用的是原始的observable2
,而不是经过过滤的代码。 filter
函数不会修改调用的Observable
,而是返回一个新的ojit_code。
因此,要修复您的代码,请将过滤器结果保存到新变量中,并使用它代替原始的可观察到的变量:
val filteredObservable2 = observable2.filter { i ->
i % 2 == 0
}
tvText.setOnClickListener {
filteredObservable2.subscribe(object: Subscriber<Int>() {
/*...*/
}
}