Saya mencoba membuat Observable
sedemikian rupa sehingga akan memuat beberapa data dari jaringan pada suatu interval, dan setiap kali pengguna menyegarkan halaman. Inilah inti dari apa yang saya miliki sejauh ini:
PublishSubject<Long> refreshSubject = PublishSubject.create();
Observable<MyDataType> observable = Observable.merge(
Observable.interval(0, 3, TimeUnit.SECONDS),
refreshSubject
)
.flatMap(t -> {
// network operations that eventually return a value
// these operations are not observables themselves
// they are fully blocking network operations
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(data -> {
// update ui with data
}, error -> {
// do something with error
});
Kemudian dalam panggilan balik penyegaran saya punya:
refreshSubject.onNext(0L);
Ini berjalan pada interval dengan baik, namun ketika saya menyegarkan, itu meledak dengan NetworkOnMainThreadException
. Saya pikir saya menangani ini dengan subscribeOn
/observeOn
. Apa yang saya lewatkan? Juga, mengapa hal ini tidak menyebabkan kerusakan ketika Observer
dipicu dari interval?