2016-07-08 11 views
0

Ich bin vor ein Problem mit Retrofit und Realm mit RxJava: Ich habe einen Bereich beobachtbar Observable.just(realm.copyFromRealm(realm.where(FooBar.class).findAll())) verwenden und eine Nachrüstung beobachtbaren mFooBarService.getFooBars() verwenden.
Ich möchte diese so kombinieren, dass zuerst die Datenbank (Realm) und dann die API (Retrofit) die Daten ausgibt. Ich mache das, indem ich sie concating: Observable.concat(realmObservable, apiObservable)Deaktivieren der Vernetzung hält Daten von Reich emittierenden

Das funktioniert gut. Ich kann auch meinen API-Server stoppen, alles funktioniert gut, weil die Datenbank die Daten enthält. Jetzt das Problem: , wenn ich Netzwerk auf meinem Handy (wifi, mobile Daten) durch den Beobachter abschalten. Ich dachte, dass der Beobachter zuerst die Datenbankdaten und dann einen Timeout oder Verbindungsfehler erhält? Stattdessen erhalte ich nur einen Fehler.

Vielen Dank im Voraus!

Edit:
Ok, versuchen Sie, ich zu klären, was ich meine.
Es sieht wie folgt aus, wenn ich die Netzwerkverbindung haben, aber der Server ausgefallen ist:
realmObservable.concat(apiObservable) -----A---B---C---D---|---ERROR--------> So bekomme ich die Daten und dann einen Fehler
Aber wenn der Server ausgefallen ist sieht es oben auch wie dieses, sondern ein erhalte ich nur Fehler und nicht die Daten zuerst.
Ich hoffe du verstehst mich jetzt.

Antwort

0

Sie erhalten einenError-Anruf von Retrofit und nicht von Realm. Ihr Design der Verkettung von Realm + Retrofit scheint in Ordnung, was Sie hier vermissen, ist die Fehlerbehandlung für Retrofit, wenn keine Internetverbindung besteht. Sie können dies überprüfen, indem Sie den gesamten Realm-Code kommentieren und weiterhin Fehler erhalten.

Es gibt zwei Möglichkeiten, dieses Problem zu beheben,

  • prüfen für Internet-Anschluss Verfügbarkeit vor Retrofit Anruf
  • machen individuelle Fehler hinzufügen in Retrofit-Handling
+0

Dank für Ihre Antwort danken. Ich weiß, dass ich den Fehler von Retrofit bekomme, aber bevor der Fehler abgefangen wird, erhalte ich keine Daten von Realm. – shilch

+0

Nur um klar zu sein, wenn Sie .first in Ihrem concat verwenden und keine Ihrer Quellen (Realm und Retrofit) irgendwelche Ergebnisse für Sie haben, wird es einen Fehler werfen, und ich denke, wie Sie erwähnt haben, fangen Sie diesen Fehler, AFAIK wenn Realm Daten hat, unabhängig von der Internetverbindung wird es die gleiche zurückgeben, können Sie den vollen Code teilen, wo dies zur besseren Übersicht geschieht. –

+0

siehe meine aktualisierte Frage – shilch