Ich versuche, Hintergrundabfragen in einer auf Rxjava basierenden Android-Anwendung zu implementieren, wobei: < /p>
Ein Repository alle 10 Sekunden regelmäßig Daten von einer API abgerufen und emittiert ab Aktualisierungen über ein Verhaltensunterschied. Das Problem: < /p>
Das Repository ruft Onnext () zum Verhalten auf Die emittierten Werte (der Abonnementblock wird nie ausgeführt). < /li>
Es werden keine Fehler geworfen. Beispiel) < /H2>
Repository-Abruft Daten und emittiert über das Verhalten < /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>
Präsentator-Abonniert die Daten < /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>
Was ich ausprobiert habe < /h3>
bestätigte, dass Onnext () < /li>
genannt wird Subjekt genannt. (seltsam) < /li>
< /ol>
Frage laut Obwohl der Moderator abonniert werden sollte? .
Jede Hilfe oder Debugging -Vorschläge wären sehr geschätzt!
Ich versuche, Hintergrundabfragen in einer auf Rxjava basierenden Android-Anwendung zu implementieren, wobei: < /p>
Ein Repository alle 10 Sekunden regelmäßig Daten von einer API abgerufen und emittiert ab Aktualisierungen über ein Verhaltensunterschied. Das Problem: < /p>
Das Repository ruft Onnext () zum Verhalten auf Die emittierten Werte (der Abonnementblock wird nie ausgeführt). < /li> Es werden keine Fehler geworfen. Beispiel) < /H2> Repository-Abruft Daten und emittiert über das Verhalten < /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>
Präsentator-Abonniert die Daten < /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> Was ich ausprobiert habe < /h3>
bestätigte, dass Onnext () < /li> genannt wird Subjekt genannt. (seltsam) < /li> < /ol> Frage laut Obwohl der Moderator abonniert werden sollte? . Jede Hilfe oder Debugging -Vorschläge wären sehr geschätzt!
Ich habe ein verwirrendes Timing-Problem mit RXJAVA-Betreibern in einem High-Throughput-Dienst (40 TPS) mit gleichzeitiger Ausführung. Ich habe zwei Klassen, die Ausführungszeiten log, aber sie...
Ich versuche, den Unterschied zwischen der Ackdeadline -Eigenschaft im Abonnement und der Ackdeadline -Eigenschaft auf dem Abonnenten zu verstehen. Es ist klar, dass die Ackdeadline im Abonnement der...
Ich verwende Laravel 8 als mein Framework. Ich arbeite derzeit mit API Mobile und möchte dafür sorgen, dass die Daten immer gleichzeitig mit der Datenbank aktualisiert werden.
Was muss ich tun, damit...