Я пытаюсь внедрить фоновые опросы в приложении 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
Форум для тех, кто программирует под Android
1739494947
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 () возвращает ложные , даже если докладчик должен быть подписан? .
Любая помощь или предложения отладки были бы очень оценены!
Подробнее здесь: [url]https://stackoverflow.com/questions/79438106/rxjava-behaviorsubject-onnext-is-called-but-subscriber-is-not-receiving-update[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия