当有变化时,RxJava2可观察不处理onNext

时间:2017-10-24 09:14:00

标签: kotlin rx-java rx-java2

我是RxJava的初学者。 我想跟踪Int变量的变化,并在变化时对其做出反应。

以下是我的例子:

class MainActivity : AppCompatActivity() {

    lateinit var button: Button
    var counter: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val observable :Observable<Int> = Observable.just(counter)

        button = findViewById(R.id.button)

        button.setOnClickListener(View.OnClickListener {
            counter++
        })


        observable.subscribe(
                Consumer { t ->
                    Log.d("fromObservable", counter.toString()) }
            )
        }
    }
}

但是,单击按钮时,Log永远不会调用。 如何使用RxJava2正确使用它?

2 个答案:

答案 0 :(得分:1)

您创建了一个只发出一个元素的简单observable,但您可以使用Subject作为用例:

class MainActivity : AppCompatActivity() {

    lateinit var button: Button
    var counter: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val subject: BehaviorSubject<Int> = BehaviorSubject.createDefault(counter)
        val observable: Observable<Int> = subject.hide()

        button = findViewById(R.id.button)

        button.setOnClickListener(View.OnClickListener {
            subject.onNext(++counter)
        })

        observable.subscribe(
                Consumer { t ->
                    Log.d("fromObservable", counter.toString()) }
            )
        }
    }
}

答案 1 :(得分:1)

您没有正确创建.ideavimrc

Observable将创建一个Observable.just(counter),其值为Observable并完成。 Documentation of Observable.just()

您可以使用counter Subject来做您想做的事情。 Documentation of Subject

BehaviorSubject
相关问题