Kotlin 发生更改时,RxJava2 observable不处理onNext

Kotlin 发生更改时,RxJava2 observable不处理onNext,kotlin,rx-java,rx-java2,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)

我是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()) }
            )
        }
    }
}
class MainActivity:AppCompatActivity(){
lateinit变量按钮:按钮
变量计数器:Int=0
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
可观测值:可观测=可观测。仅(计数器)
按钮=findViewById(R.id.button)
button.setOnClickListener(View.OnClickListener{
柜台++
})
可观察的(
消费者{t->
Log.d(“fromObservable”,counter.toString())}
)
}
}
}
但是,当我单击按钮时,日志从未调用。
如何使用RxJava2正确地创建它?

您创建了一个仅发射一个元素的简单可观察对象,但您可以在您的用例中使用
主题:

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()) }
            )
        }
    }
}
class MainActivity:AppCompatActivity(){
lateinit变量按钮:按钮
变量计数器:Int=0
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val subject:BehaviorSubject=BehaviorSubject.createDefault(计数器)
val observable:observable=subject.hide()
按钮=findViewById(R.id.button)
button.setOnClickListener(View.OnClickListener{
subject.onNext(++计数器)
})
可观察的(
消费者{t->
Log.d(“fromObservable”,counter.toString())}
)
}
}
}

您没有正确创建可观察的

Observable。just(counter)
将创建一个
Observable
,它将发出
计数器的值并完成

你可以用
主题做你想做的事,比如
行为主题

class MainActivity:AppCompatActivity(){
lateinit变量按钮:按钮
变量计数器:Int=0
设置(值){
字段=值
可观察的.onNext(值)
}
val可观测值:BehaviorSubject=BehaviorSubject.createDefault(计数器)
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
按钮=findViewById(R.id.button)
button.setOnClickListener(View.OnClickListener{
柜台++
})
可观察的(
消费者{t->
Log.d(“fromObservable”,counter.toString())}
)
}
}

< /代码>如果您想直接使用该属性,请考虑使用可观察性委托。
class MainActivity : AppCompatActivity() {
    lateinit var button: Button

    var counter : Int = 0
        set(value) {
            field = value
            observable.onNext(value)
        }
    val observable : BehaviorSubject<Int> = BehaviorSubject.createDefault(counter)

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

        button = findViewById(R.id.button)

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

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