Dorozumění v jazyce Java: RxJava pro začátečníky

V tomto článku vysvětlím základy RxJavy na příkladech. Tento článek je určen pro začátečníky v jazyce RxJava. Na druhou stranu, pokud už o RxJavě něco víte, je tento článek vhodný pro zopakování vašich znalostí.

RxJava je javovská implementace virtuálního stroje ReactiveX knihovny pro sestavování asynchronních a na událostech založených programů pomocí pozorovatelných sekvencí.

Stavebními kameny RxJavy jsou Observables a Subscribers. Observable slouží k vysílání položek a Subscriber slouží ke konzumaci těchto položek. Možná si někteří z vás pomyslí: „Hmmm, to je tak podobné standardnímu vzoru Observable“. A ano, je, ale RxJava to dělá mnohem lépe a má více možností. Například Observables často nezačnou emitovat položky, dokud se k nim někdo nepřihlásí. To je skvělá vlastnost, protože tímto způsobem byste měli ušetřit své výkony.

RxJava funguje takto. Subscriber se přihlásí k Observable, pak Observable zavolá Subscriber.onNext() pro libovolný počet položek, pokud se něco pokazí, je tu Subsciber.onError() a pokud vše skončí v pořádku, je tu Subscriber.onCompleted(). Vidíte, že je to snadné!

Zmlkněte! Dejte mi nějaké efektní kódy!

Příklad 1

V tomto příkladu vytvoříme základní Observable a Subscriber a pak je propojíme a uvidíme, co se bude dít. Pozor, spoiler! Něco úžasného…

Vytvoříme základní Observable:

Vytvořený Observable vysílá řetězec „Blue Factory“ a pak se dokončí. Řetězec „Blue Factory“ bude přijat při metodě Subscribers onNext(). Nyní vytvoříme Subscriber.

Subscriber obdrží hodnotu String na metodě onNext() a vypíše ji, také String „I’m done“ vypíše při volání metody onCompleted().

Teď je propojíme.

Výsledek:

I/System.out: Blue Factory

I/System.out: I’m done

Když dojde k odběru, myObservable zavolá metody mySubscription onNext() a onComplited(). Výsledkem jsou výstupy „Blue factory“ a „I’m done“, poté se vše zastaví a ukončí.

Můžu to udělat jednodušeji?

Jistě! Můžeš to udělat!

Můžeš si všimnout, že vytvoření myObservable má příliš mnoho kódu a vypadá to nepřehledně. RxJava nám dává několik efektních zkratek.

Některé z těchto zkratek jsou metody jako Observable.just() a Observable.from();

Observable.just() vysílá pouze jednu jedinou položku a Observable.from() vysílá jednu položku po druhé ze seznamu položek.

Zmlkni! Dejte mi nějaký efektní kód!

Příklad 2

V tomto příkladu uděláme to samé jako v Příkladu 1, ale nyní s menším množstvím kódu.

Vytvoříme náš nový efektní, dobře vypadající Observable:

Wow! Zdá se, že náš Observable trochu zhubl!
Vytvořme Subscriber:

Subscriber je stejný!
Teď je propojte a počkejte, až se stane kouzlo!

Výsledek:

I/System.out: Blue Továrna
I/System.out: I’m done

Jak vidíte, podařilo se nám dokončit náš úkol a udělat úplně stejnou věc s menším množstvím kódu.
Zmlkněte! Dejte mi nějaký efektní kód!

Příklad 3

V tomto příkladu uděláme s funkcí Observable.from() něco trochu jiného. Jde o vypsání řetězců „Blue“, „Factory“, „Blog“, „Post“.
Připomeňme si, co je to Observable.from(). Observable.from() přijímá seznam položek a vypisuje po jedné, takže Observable.from() je přesně to, co potřebujeme!
Nejprve vytvoříme ArrayList s řetězci:

Vytvoříme tento Observable.from(), ano?“

Jak vidíte, Observable.from() dostane jako argument ArrayList načtený řetězci. Nyní vytvoříme Subscriber, propojíme je a počkáme na kouzlo.

Výsledek:

I/System.out: Blue
I/System.out: Factory
I/System.out: I/System.out: Blog
I/System.out:

Jak vidíte, opět jsme úspěšně zvládli náš úkol!
Všechno, co jste se doposud naučili, jsou čistě základní triky, ale nyní se pustíme do „těžších“ triků!

Co jsou Operátory v Rx?

Operátory jsou metody vytvořené pro řešení transformací a řešení problémů s voláním API. Ukážu vám jeden jednoduchý příklad pro transformaci pomocí Map a možná v dalších článcích příklady řešení volání API pomocí Retrofitu, RxJavy na architektonickém vzoru MVP.

Pro příklad připojme k našemu řetězci „Blue Factory“ “ Blog Post“. Můžeme to udělat několika způsoby.

První způsob:

Můžeme to udělat v Observable, ale Observable má emitovat položky, ne je měnit.
Druhý způsob:

Stejný příběh, Subscriber neměl měnit položky.
Řešením je přidat ještě jeden krok, a to přidáním Operator. Operator je jeden další krok mezi Observable a Subscriber, kde lze objekt transformovat.
Takže to udělejme správně!
Zmlkni! Dejte mi nějaký efektní kód!

Příklad 4

Nejprve vytvořme Observable:

Všimněte si, že myObservable vysílá pouze jeden nezměněný prvek.
Nyní vytvoříme Operator, pro tento příklad je nejlepším řešením použít operátor Map. Operátor Map může transformovat náš objekt způsobem, který se nám líbí, a vrátit jej Subscriberu.

Při volání operátorů (String s) se provede transformace metody String „Blue Factory“.
A zde je Subscriber:

Výsledek:

I/System.out: Modrá továrna Blog Post

Tento příklad představuje nepatrný zlomek toho, co Operátory umí. Například operátor Mapa lze skládat vícekrát, jako v příkladu níže:
Zmlkni! Dejte mi nějaký efektní kód!

Příklad 5

Operátory také mohou měnit typ emitovaného prvku jako v příkladu níže:
Zmlkni! Dejte mi nějaký efektní kód!

Příklad 6

V tomto příkladu bude Observable emitovat String „5“ a Operátor jej přemění na Integer 5. V tomto příkladu bude Observable emitovat String „5“. Vytvořme Observable.

Všimněte si, že typ myObservable je Observable a Observable emituje String.
Vytvořme operátor Map!“

Všimněte si, že metoda Map operator call(String s) přijímá String a vrací Integer.
Ukryjeme Subscriber a propojíme je.

Typ Subscriber je stejný jako typ Observable a typ Operators vrací (Integer).
Tady vám ukážu jen malý zlomek obrázku. S operátory můžete dělat vše, co chcete! A nejlepší na tom je, že RxJava má nepřeberné množství různých Operátorů. Zde si můžete prohlédnout všechny operátory: https://github.com/ReactiveX/RxJava/wiki/Alphabetical-List-of-Observable-Operators.

Na závěr Operátory jsou mocné pro transformaci objektů a leštění dat a po tom všem bude váš kód vypadat pěkně a čistě!

Co mohu dělat s RXJava?

Můžete dělat vše, co chcete, protože váš Observable může být vším, může být: Může být: String, Integer, volání API, kliknutí atd. Jak budete postupovat jako vývojáři Androidu, budete RxJavu používat hlavně pro volání API a pro androidí widgety. RxJava poskytuje snadnou manipulaci s API, protože se nemusíte starat o vlákna a můžete zřetězit několik požadavků a získat výsledek na jednom Subscriberu. Pomocí RxJava můžete zpracovávat chování některých widgetů, například co udělá widget po pětinásobném stisknutí, nebo můžete vytvořit Observable, který bude každé 4 sekundy emitovat String ze vstupu EditText, a mnoho dalších efektních věcí. Doufám, že vám tento článek poskytl základy RxJavy, a doufám, že budete RxJavu zkoumat i v budoucnu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.