Kotlin 发生更改时,RxJava2 observable不处理onNext
我是RxJava的初学者。 我想跟踪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)
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()) }
)
}
}