当发生变化时,RxJava2 observable 不处理 onNext
RxJava2 observable not processing onNext when there is a change
我是 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()) }
)
}
}
}
但是,当我单击按钮时,日志从未调用。
我怎样才能正确地使用 RxJava2?
您创建了一个仅发射一个元素的简单可观察对象,但您可以将 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()) }
)
}
}
}
您没有正确创建 Observable
。
Observable.just(counter)
将创建一个 Observable
发出 counter
的值并完成。 Documentation of Observable.just()
你可以用 Subject
像 BehaviorSubject
做你想做的事。 Documentation of Subject
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()) }
)
}
}
我是 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()) }
)
}
}
}
但是,当我单击按钮时,日志从未调用。 我怎样才能正确地使用 RxJava2?
您创建了一个仅发射一个元素的简单可观察对象,但您可以将 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()) }
)
}
}
}
您没有正确创建 Observable
。
Observable.just(counter)
将创建一个 Observable
发出 counter
的值并完成。 Documentation of Observable.just()
你可以用 Subject
像 BehaviorSubject
做你想做的事。 Documentation of Subject
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()) }
)
}
}