Ich habe einen Bildschirm, der eine Liste von Elementen zeigt.Android, Java RX, asynchron
- Zuerst möchte ich die Elemente aus der lokalen Datenbank anzeigen.
- Nachdem der Benutzer die lokalen Elemente angezeigt hat, überprüfen Sie das Internet und aktualisieren Sie sie (wenn das Gerät über Internet verfügt).
Ich habe die folgenden Codefragmente
Observable<Data> fetchFromdisk = ...;
Observable<Data> fetchFromNetwork = ...;
Observable<Data> fetchData= Observable.concat (fetchFromdisk ,fetchFromNetwork);
Dann
mSubscriptions.clear();
Subscription subscription = fetchData
.subscribeOn(mSchedulerProvider.computation())
.observeOn(mSchedulerProvider.ui())
.subscribe(
new Subscriber<List<Data>>() {
@Override
public void onCompleted() {
view.setLoadingIndicator(false);
}
@Override
public void onError(Throwable e) {
processError(e);
}
@Override
public void onNext(List<Data> data) {
processData(data);
}
}
);
mSubscriptions.add(subscription);
folgende ich tue Aber was passiert ist, ist, dass fetchFromdisk zum ersten Mal ausgeführt wird, dann wird FetchFromNetwork ausgeführt. Sobald die emittierenden Elemente enden, beginnt die Ausführung von ProcessData.
Das ist genau das Gegenteil von dem, was ich erreichen möchte. Ich möchte den Benutzer priorisieren, um die Daten schnell zu sehen und dann ins Internet gehen. was mache ich falsch?
Side Punkt, Sie sollten – Sourabh
@Sourabh ich schon versucht, aber es hat nicht funktioniert entweder – user60108
Nein, Seite Punkt, ich bin nicht sein mit 'Schedulers.io()' werden, um eine Lösung für Ihr Problem zu sagen, aber du solltest sowieso io verwenden – Sourabh