Grundstruktur
Schauen wir uns zunächst den grundlegendsten Code an und analysieren Sie, wie dieser Code in Rxjava implementiert wird.
Observable.OnsuBScribe <String> OnSubScribe1 = new Observable.OnsuBScribe <string> () {@Override public void call (subscriber <? Super String> Abonnent) {subscriber.onnext ("1"); subscriber.oncompleted (); }}; Subscriber <string> subscriber1 = neuer subscriber <string> () {@Override public void onCompleted () {} @Override public void onError (throwable e) {} @Override public void Onnext (String S) {}}; Observable.criber (Onsubscriber1) .Subscriber1) .Subscriber1).Schauen wir uns zunächst den Code von Observable an.create an
public Final static <T> Observable <T> create (OnSubscribe <T> f) {Neue Observable <T> (Hook.oncreate (f));} Protected Observable (OnSubscribe <T> f) {this.onsubscribe = f;} Es ruft direkt den Konstruktor von Observable auf, um ein neues beobachtbares Objekt zu erstellen. Wir markieren dieses Objekt vorübergehend als Observable1 für die spätere Rückverfolgbarkeit.
Gleichzeitig wird das ONSUBScribe -Objekt, in dem wir bestanden, in der Onsubscribe -Eigenschaft von Observable1 gespeichert. Diese Eigenschaft ist im nachfolgenden Kontext sehr wichtig. Bitte achten Sie darauf.
Schauen wir uns als nächstes die Abonnementmethode an.
öffentliches Abonnement Abonnement Abonnement (Abonnent <? Hook.OnsuBsCricRestart (beobachtbar, beobachtbar.OnsuBScribe) .Call (Abonnent); return hook.onsubscribereturn (Abonnent);}
Wie Sie nach dem Abonnieren sehen können, wird die Methode für beobachtbare 1.OnsuBScribe.Call direkt aufgerufen. Dies ist die Aufrufmethode des Onsubscribe1 -Objekts in unserem Code. Die übergebenen Parameter sind das in unserem Code definierte Subscriber1 -Objekt. Was in der Aufrufmethode getan wird, besteht darin, die Onnext- und OnComplete -Methoden des eingehenden Abonnenten -Objekts aufzurufen.
Dies ermöglicht die Kommunikation zwischen dem Beobachter und dem Beobachter. Ist es nicht sehr einfach?
public void call (Abonnent <? Super String> Abonnent) {subscriber.onnext ("1"); subscriber.oncompleted ();}Rxjava -Nutzungsszenario Zusammenfassung
1. Überprüfen Sie zuerst das zwischengespeicherte Szenario
Daten abrufen, prüfen Sie zuerst, ob im Speicher einen Cache vorhanden ist, und überprüfen Sie dann, ob im Datei -Cache eine vorherige Bedingung vorhanden ist. Schließlich wird die folgende Bedingung vom Netzwerk erfüllt.
endgültig beobachtbar <string> meide = beobachtbar.create (new Observable Observable.create (new Observable subscriber.oncompleted (); Observable <string> network = beobachtbar.just ("network"); // Die Hauptsache ist, sich auf den Concat-Operator zu verlassen, um Observable zu implementieren.2. Die Schnittstelle muss warten, bis mehrere Schnittstellen vor der Aktualisierung gleichzeitig Daten gesammelt haben
// Teilen Sie die Ausgabe von zwei Observablen auf, und die Bestellung ist nicht garantiert. Senden Sie an den Abonnenten in der Reihenfolge der Ereignisse private void testMerge () {Observable <string> Observable1 = Demoutils.createObservable1 (). Abonnieren (Schedulers.NewThread ()); Observable <string> Observable2 = Demoutils.createObservable2 (). Abonnieren (Schedulers.newThread ()); Observable.Merge (Observable1, Observable2) .Subscribeon (Schedulers.NewThread ()) .Subscribe (System.out :: println);}3. Die Anforderung einer Schnittstelle hängt von den Daten ab, die von einer anderen API -Anforderung zurückgegeben wurden.
Nachdem wir uns beispielsweise anmelden müssen, erhalten wir häufig die Nachrichtenliste basierend auf dem Token, den wir erhalten.
Hier wird Rxjava verwendet, um das Problem verschachtelter Rückrufe zu lösen. Es gibt ein richtiges Substantiv namens Callback Hell
NetworkService.getToken ("Benutzername", "Passwort") .flatMap (s -> networkService.getMessage (s)) .Subscribe (s -> {System.out.Out.println ("Nachricht:" + s);});4. Die Schnittstellenschaltfläche muss kontinuierliche Klicks verhindern
Rxview.clicks (findViewById (R.Id.BTN_Throttle)) .ThrottleFirst (1, TimeUnit.Seconds) .Subscribe (vermeiden -> {System.out.println ("Click");});5. Responsive Schnittstelle
Beispielsweise wird das Kontrollkästchen überprüft und die entsprechende Präferenz automatisch aktualisiert.
SharedPreferences Preferences = PreferenceManager.getDefaultSharedPreferences (this); findViewById (r.id.cb_test);
6. Komplexe Datenumwandlung
Beobachtbar.just ("1", "2", "2", "3", "4", "5") .Map (Integer :: ParseInt) .Filter (S -> S> 1) .Distinct () .Take (3) .Reduce ((Integer, Integer2) -> Integer. .Subscribe (System.out :: println); // 9