Rxjava BehaviorSubject.onNext () называется, но абонент не получает обновленияAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Rxjava BehaviorSubject.onNext () называется, но абонент не получает обновления

Сообщение Anonymous »

Я пытаюсь внедрить фоновые опросы в приложении 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»