当有变化时,RxJava2可观察的不在onNext上进行处理
我是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正确?
你创建了一个简单的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()) } ) } } }
您没有正确创建您的Observable
。
Observable.just(counter)
将创建一个可以发出counter
值并完成的Observable
。 Observable.just()的文档
你可以用BehaviorSubject
这样的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()) } ) } }