Я пытаюсь внедрить фоновые опросы в приложении Android на основе Rxjava, где: < /p>
Репозиторий периодически получает данные из API каждые 10 секунд и испускает Обновления с помощью поведения. Проблема: < /p>
Репозиторий призывает onnext () на поведении. < /Li>
Однако докладчик не получает Излучаемые значения (блок подписки никогда не выполняется). < /li>
Ошибки не допускаются. < /li>
< /ul>
структура кода (упрощено Пример) < /h2>
Repository-извлекает данные и испускает через BehriateUsubject < /h4>
@Singleton
class MyRepository @Inject constructor(
private val apiService: ApiService
) {
private val pollingDisposable = SerialDisposable()
private val subject = BehaviorSubject.create()
fun watchData(): Observable = subject.hide()
fun startPolling() {
Observable.interval(10, TimeUnit.SECONDS, Schedulers.io())
.flatMapSingle {
fetchDataFromApi()
.map { Optional(it) }
.onErrorReturn { Optional(null) }
}
.subscribe(
{ data ->
subject.onNext(data) // This is getting called
},
{ error -> error.printStackTrace() }
)
.into(pollingDisposable)
}
private fun fetchDataFromApi(): Single {
return apiService.getData().subscribeOn(Schedulers.io())
}
}
< /code>
докладчик-подписывается на просмотр данных < /h4>
class MyPresenter @Inject constructor(
private val repository: MyRepository
) : RxPresenter() {
override fun onStart() {
super.onStart()
repository.startPolling() // Start polling when presenter starts
disposeBag += repository.watchData()
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ optionalData ->
Log.d("PRESENTER_DEBUG", "Received new data: $optionalData") // Never gets called
if (optionalData.value != null) {
updateUI(optionalData.value)
}
}, { error ->
Log.e("PRESENTER_DEBUG", "Error receiving data", error) // Never gets called
})
}
private fun updateUI(data: Data) {
// UI update logic
}
}
< /code>
Что я попробовал < /h3>
подтвердил, что onnext () называется < /li>
называется subject.hasobservers () перед вызовом onnext () и возвращает false. (Странно) < /li>
< /ol>
Вопрос: < /h3>
Почему hasobservers () возвращает ложные , даже если докладчик должен быть подписан? .
Любая помощь или предложения отладки были бы очень оценены!
Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-update
Rxjava BehaviorSubject.onNext () называется, но абонент не получает обновления ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение