Java verstehen: RxJava für Anfänger

In diesem Artikel werde ich die Grundlagen von RxJava anhand von Beispielen erklären. Dieser Artikel ist für RxJava-Einsteiger gedacht. Wenn Sie aber schon etwas über RxJava wissen, ist dieser Artikel gut geeignet, um Ihr Wissen aufzufrischen.

RxJava ist eine Java-VM-Implementierung von ReactiveX, einer Bibliothek zur Erstellung asynchroner und ereignisbasierter Programme unter Verwendung beobachtbarer Sequenzen.

Die Bausteine von RxJava sind Observables und Subscribers. Observable wird für die Ausgabe von Elementen verwendet und Subscriber für den Konsum dieser Elemente. Vielleicht werden einige von Ihnen denken: „Hmmm, das ist so ähnlich wie das Standard-Observable-Muster“. Und ja, das ist es auch, aber RxJava macht es viel besser und hat mehr Optionen. Zum Beispiel beginnen Observables oft erst mit der Ausgabe von Elementen, wenn jemand sie abonniert hat. Das ist ein großartiges Feature, denn auf diese Weise sollte man sich die Leistung sparen.

RxJava funktioniert folgendermaßen. Subscriber abonniert Observable, dann ruft Observable Subscriber.onNext() für eine beliebige Anzahl von Elementen auf, wenn etwas schief geht, hier ist Subsciber.onError() und wenn alles gut ausgeht, hier ist Subscriber.onCompleted(). Du siehst, das ist einfach!

Halt die Klappe! Gib mir ein paar ausgefallene Codes!

Beispiel 1

In diesem Beispiel werden wir ein einfaches Observable und einen Subscriber erstellen, und dann werden wir sie miteinander verknüpfen und sehen, was passieren wird. Spoiler-Alarm! Etwas Fantastisches…

Lassen Sie uns ein einfaches Observable erstellen:

Das erstellte Observable sendet den String „Blue Factory“ aus und wird dann beendet. Der String „Blue Factory“ wird von der Methode onNext() des Subscribers empfangen. Jetzt erstellen wir Subscriber.

Subscriber empfängt String-Wert auf onNext()-Methode und gibt ihn aus, auch String „I’m done“ gibt aus, wenn onCompleted()-Methode aufgerufen wird.

Nun verbinde sie.

Ergebnis:

I/System.out: Blue Factory

I/System.out: I’m done

Wenn die Subskription stattfindet, ruft myObservable die Methoden mySubscription onNext() und onComplited() auf. Das Ergebnis sind die Ausgaben „Blue factory“ und „I’m done“, danach hört alles auf und wird beendet.

Kann ich es einfacher machen?

Natürlich! Du kannst es tun!

Du wirst feststellen, dass die Erstellung von myObservable zu viel Code enthält und unordentlich aussieht. RxJava gibt uns einige schicke Abkürzungen.

Einige dieser Abkürzungen sind Methoden wie Observable.just() und Observable.from();

Observable.just() gibt nur ein einzelnes Element aus und Observable.from() gibt ein Element nach dem anderen aus einer Liste von Elementen aus.

Schnauze! Gib mir ein bisschen schicken Code!

Beispiel 2

In diesem Beispiel werden wir das Gleiche wie in Beispiel 1 machen, aber jetzt mit weniger Code.

Lassen Sie uns unser neues, schickes, gut aussehendes Observable erstellen:

Wow! Es scheint, dass unser Observable etwas an Gewicht verloren hat!
Lassen Sie uns Subscriber erstellen:

Subscriber ist gleich!
Nun verbinde sie und warte darauf, dass die Magie passiert!

Ergebnis:

I/System.out: Blue Factory
I/System.out: Ich bin fertig

Wie du siehst, schaffen wir es, unsere Aufgabe zu erfüllen und genau das Gleiche mit weniger Code zu tun.
Halt die Klappe! Gib mir mal ein bisschen schicken Code!

Beispiel 3

In diesem Beispiel werden wir etwas anders mit Observable.from() machen. Die Idee ist, die Strings „Blue“, „Factory“, „Blog“, „Post“ auszugeben.
Erinnern wir uns, was Observable.from() ist. Observable.from() empfängt eine Liste von Elementen und gibt ein Element nach dem anderen aus, also ist Observable.from() genau das, was wir brauchen!
Zuerst werden wir eine ArrayList mit Strings erstellen:

Lassen Sie uns diese Observable erstellen.from(), oder?

Wie Sie sehen können, erhält Observable.from() als Argument eine ArrayList, die mit Strings geladen ist. Jetzt erstellen wir Subscriber und verknüpfen sie und warten auf die Magie.

Ergebnis:

I/System.out: Blau
I/System.out: Factory
I/System.out: Blog
I/System.out: Post

Wie du siehst, haben wir unsere Aufgabe wieder erfolgreich gelöst!
Alles, was du bis jetzt gelernt hast, sind reine Basistricks, aber jetzt werden wir ein paar „härtere“ Tricks machen!

Was sind Operatoren in Rx?

Operatoren sind Methoden, die erstellt wurden, um Probleme mit Transformationen und API-Aufrufen zu lösen. Ich werde Ihnen ein einfaches Beispiel für die Transformation mit Map zeigen, und vielleicht in einigen weiteren Artikeln Beispiele für den Umgang mit API-Aufrufen mit Retrofit, RxJava auf MVP-Architekturmuster.

Zum Beispiel lassen Sie uns unsere „Blue Factory“ String mit “ Blog Post“ anhängen. Wir können dies auf verschiedene Arten tun.

Erste Möglichkeit:

Wir können dies in Observable tun, aber Observable soll Elemente ausgeben, nicht sie ändern.
Zweiter Weg:

Gleiche Geschichte, Subscriber sollte keine Elemente ändern.
Die Lösung ist, einen weiteren Schritt hinzuzufügen, indem Operator hinzugefügt wird. Operator ist ein zusätzlicher Schritt zwischen Observable und Subscriber, in dem das Objekt umgewandelt werden kann.
Lassen Sie es uns also richtig machen!
Klappe halten! Gib mir ein bisschen Code!

Beispiel 4

Erzeugen wir zunächst Observable:

Beachte, dass myObservable nur ein unverändertes Element ausgibt.
Erzeugen wir nun Operator, für dieses Beispiel ist die beste Lösung der Map-Operator. Der Map-Operator kann unser Objekt so umwandeln, wie wir es wollen, und es an Subscriber zurückgeben.

Im Operator-Aufruf (String s) wird die Umwandlung des Strings „Blue Factory“ durchgeführt.
Und hier ist Subscriber:

Ergebnis:

I/System.out: Blue Factory Blog Post

Dieses Beispiel stellt einen winzigen Bruchteil dessen dar, was Operatoren tun können. Zum Beispiel kann der Map-Operator mehrfach gestapelt werden, wie im folgenden Beispiel:
Halt die Klappe! Gib mir mal einen schicken Code!

Beispiel 5

Operatoren können auch den Typ des emittierten Elements ändern, wie im folgenden Beispiel:
Halt die Klappe! Gib mir mal einen schicken Code!

Beispiel 6

In diesem Beispiel wird Observable die Zeichenkette „5“ ausgeben und Operator wird sie in die Ganzzahl 5 umwandeln. Erstellen wir Observable.

Beachte, dass myObservable vom Typ Observable ist und Observable String ausgibt.
Lassen Sie uns Map-Operator erstellen!

Beachten Sie, dass die Methode Map-Operator call(String s) String erhält und Integer zurückgibt.
Lassen Sie uns Subscriber erstellen und sie miteinander verbinden.

Der Typ von Subscriber ist derselbe wie der Typ von Observable und der Typ von Operatoren, die Integer zurückgeben.
Hier zeige ich Ihnen nur einen kleinen Teil des Bildes. Mit Operatoren kann man alles machen was man will! Und das Beste daran ist, dass RxJava eine Fülle von verschiedenen Operatoren hat. Hier kannst du dir alle Operatoren ansehen: https://github.com/ReactiveX/RxJava/wiki/Alphabetical-List-of-Observable-Operators.

Zusammenfassend kann man sagen, dass Operatoren sehr mächtig sind, um Objekte zu transformieren und Daten aufzupolieren, und nach all dem wird dein Code schön und sauber aussehen!

Was kann ich mit RXJava machen?

Du kannst alles machen, was du willst, weil dein Observable alles sein kann, es kann sein: String, Integer, API-Aufruf, Klick, usw. Wenn Sie wie ein Android-Entwickler vorankommen, werden Sie RxJava hauptsächlich für API-Aufrufe und für Android-Widgets verwenden. RxJava bietet eine einfache API-Behandlung, da man sich keine Gedanken über Threading machen muss und einige Anfragen verketten kann, um das Ergebnis auf einem einzigen Teilnehmer zu erhalten. Mit RxJava können Sie einige Widget-Verhalten, zum Beispiel, was Widget wird nach fünf Mal gedrückt wird, oder Sie können Observable, die String alle 4 Sekunden von EditText Eingabe emittiert, und so viele andere ausgefallene Dinge zu behandeln. Ich hoffe, dass dieser Artikel Ihnen die Grundlagen von RxJava vermittelt und dass Sie RxJava in Zukunft weiter erforschen werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.