In dit artikel zal ik de basis van RxJava uitleggen aan de hand van voorbeelden. Dit artikel is voor RxJava beginners. Aan de andere kant, als je al iets weet over RxJava, is dit artikel goed om je kennis te herzien.
RxJava is een Java VM implementatie van ReactiveX een bibliotheek voor het samenstellen van asynchrone en event-gebaseerde programma’s door gebruik te maken van observeerbare sequenties.
De bouwstenen van RxJava zijn Observables en Subscribers. Observable wordt gebruikt om items te emitteren en Subscriber wordt gebruikt om die items te consumeren. Misschien zullen sommigen van jullie denken: “Hmmm dit lijkt zo op het standaard Observable patroon”. En ja dat is het, maar RxJava doet het veel beter en heeft meer opties. Observables beginnen bijvoorbeeld vaak pas items te emitteren als iemand zich erop abonneert. Dit is een geweldige eigenschap omdat je op deze manier je performances kunt besparen.
RxJava werkt als volgt. Subscriber abonneert zich op Observable, dan roept Observable Subscriber.onNext() aan voor een willekeurig aantal items, als er iets fout gaat is hier Subsciber.onError() en als alles goed afloopt is hier Subscriber.onCompleted(). Zie je wel dat dit makkelijk is!
Hou je mond! Geef me wat mooie codes!
Example 1
In dit voorbeeld maken we een basis Observable en Subscriber, en dan gaan we ze koppelen, en kijken wat er gebeurt. Spoiler alert! Iets geweldigs…
Laten we een basis Observable maken:
Resultaat:
I/System.out: Blue Factory
I/System.out: Ik ben klaar
Zoals u ziet, slagen we erin onze taak te volbrengen, en precies hetzelfde te doen met minder code.
Zwijg! Geef me wat mooie code!
Voorbeeld 3
In dit voorbeeld gaan we iets anders doen met Observable.from(). Het idee is om de strings “Blue”, “Factory”, “Blog”, “Post” af te drukken.
Laten we onszelf eraan herinneren wat Observable.from() is. Observable.from() ontvangt items lijst en zendt uit op item voor een, dus Observable.from() is precies wat we nodig hebben!
Eerst zullen we ArrayList met Strings maken:
Laten we die Observable.from() maken?
Zoals u kunt zien, ontvangt Observable.from() als argument een ArrayList met Strings. Laten we nu een Subscriber maken en ze aan elkaar koppelen, en wachten op de magie.
Resultaat:
I/System.out: Blue
I/System.out: Factory
I/System.out: Blog
I/System.out: Post
Zoals je ziet, hebben we onze taak weer succesvol volbracht!
Alles wat je tot nu toe geleerd hebt zijn pure basis trucs, maar nu gaan we wat “moeilijkere” trucs doen!
Wat zijn Operators in Rx?
Operators zijn methoden die gemaakt zijn om transformaties op te lossen en API aanroep problemen op te lossen. Ik zal u een eenvoudig voorbeeld voor transformatie met Map, en misschien in een aantal verdere artikelen voorbeelden van het omgaan API-oproepen met Retrofit, RxJava op MVP architectuurpatroon.
Bijvoorbeeld laten we onze “Blue Factory” String append met ” Blog Post”. We kunnen het op verschillende manieren doen.
Eerste manier:
We kunnen het in Observable doen, maar Observable is bedoeld om items te emitteren, niet om ze te wijzigen.
Tweede manier:
Hetzelfde verhaal, Subscriber werd niet verondersteld items te wijzigen.
De oplossing is om nog een stap toe te voegen, door Operator toe te voegen. Operator is een extra stap tussen Observable en Subscriber, waar objecten kunnen worden getransformeerd.
Dus laten we het op de juiste manier doen!
Zwijg! Geef me wat mooie code!
Example 4
Laten we eerst een Observable maken:
Merk op dat mijnObservable slechts één ongewijzigd item uitzendt.
Nu laten we Operator maken, voor dit voorbeeld is de beste oplossing om Map operator te gebruiken. De Map operator kan ons object transformeren op een manier die we willen en het terugsturen naar Subscriber.
In operators call (String s) methode transformatie van String “Blue Factory” wordt gedaan.
En hier is Subscriber:
Resultaat:
I/System.out: Blue Factory Blog Post
Dit voorbeeld vertegenwoordigt slechts een fractie van wat Operators kunnen doen. Map operator kan bijvoorbeeld meerdere keren worden gestapeld, zoals in onderstaand voorbeeld:
Stil op! Geef me wat mooie code!
Voorbeeld 5
Operators kunnen ook het type van het uitgezonden item veranderen, zoals in onderstaand voorbeeld:
Kop dicht! Geef me wat mooie code!
Voorbeeld 6
In dit voorbeeld zendt de Observable de String “5” uit en de Operator verandert dit in het gehele getal 5. Laten we een Observable maken.
Merk op dat myObservable van het type Observable is en dat Observable String uitzendt.
Laten we Map operator maken!
Merk op dat Map operator call(String s) methode String ontvangt en Integer teruggeeft.
Laten we Subscriber maken en ze koppelen.
Subscriber type is hetzelfde als Observable type, en Operators returning type (Integer).
Hier laat ik u slechts een klein deel van het plaatje zien. Met operatoren kun je alles doen wat je wilt! En het beste hieraan is dat RxJava een overvloed aan verschillende Operators heeft. Hier kun je alle operatoren bekijken: https://github.com/ReactiveX/RxJava/wiki/Alphabetical-List-of-Observable-Operators.
In conclusie Operators zijn krachtig voor object transformatie en data polijsten, en na dit alles, zal je code er mooi en schoon uitzien!
Wat kan ik doen met RXJava?
Je kunt alles doen wat je wilt, omdat je Observable alles kan zijn, het kan zijn: String, Integer, API call, klik, enz. Naarmate je verder komt als Android ontwikkelaar zul je RxJava vooral gebruiken voor API calls en voor android widgets. RxJava biedt gemakkelijke API afhandeling, omdat je je geen zorgen hoeft te maken over threading en je kunt een paar requests aan elkaar rijgen en het resultaat op een enkele Subscriber krijgen. Met RxJava kun je widget gedrag afhandelen, bijvoorbeeld wat een widget zal doen nadat hij vijf keer is ingedrukt, of je kunt een Observable maken die elke 4 seconden een String uitzendt van EditText input, en zo veel andere leuke dingen. Ik hoop dat dit artikel je de basis van RxJava geeft en ik hoop dat je RxJava in de toekomst zult blijven verkennen.