Zrozumieć Javę: RxJava dla początkujących

W tym artykule wyjaśnię podstawy RxJavy na przykładach. Ten artykuł jest dla początkujących użytkowników RxJavy. Z drugiej strony, jeśli wiesz już coś o RxJava, ten artykuł jest dobry do sprawdzenia twojej wiedzy.

RxJava jest implementacją w maszynie wirtualnej Java biblioteki ReactiveX do tworzenia asynchronicznych i opartych na zdarzeniach programów przy użyciu obserwowalnych sekwencji.

Budulcem RxJava są obserwowalne i subskrybenci. Obserwowalne są używane do emitowania elementów, a Subskrybent jest używany do konsumowania tych elementów. Być może niektórzy z was pomyślą: „Hmmm to jest tak podobne do standardowego wzorca Observable”. I tak jest, ale RxJava robi to znacznie lepiej i ma więcej opcji. Na przykład, Observable często nie zaczynają emitować elementów dopóki ktoś ich nie zasubskrybuje. Jest to wspaniała cecha, ponieważ w ten sposób powinieneś zaoszczędzić swoje występy.

RxJava działa w ten sposób. Subskrybent zapisuje się do Observable, następnie Observable wywołuje Subscriber.onNext() dla dowolnej liczby elementów, jeśli coś pójdzie nie tak, tutaj jest Subsciber.onError() i jeśli wszystko zakończy się dobrze, tutaj jest Subscriber.onCompleted(). Widzisz, że to jest proste!

Zamknij się! Daj mi jakieś wymyślne kody!

Przykład 1

W tym przykładzie stworzymy podstawowe Observable i Subscriber, a następnie połączymy je i zobaczymy, co się stanie. Uwaga spoiler! Coś niesamowitego…

Stwórzmy podstawowe Observable:

utworzone Observable wyemituje „Blue Factory” String, a następnie zakończy działanie. String „Blue Factory” zostanie odebrany w metodzie onNext() subskrybenta. Teraz stwórzmy Subscriber.

Subscriber odbiera wartość String w metodzie onNext() i wypisuje ją, również String „I’m done” wypisuje się po wywołaniu metody onCompleted().

Teraz je połącz.

Result:

I/System.out: Blue Factory

I/System.out: I’m done

Gdy dzieje się subskrypcja, myObservable wywołuje metody mySubscription onNext() i onComplited(). Wynikiem są wyjścia „Blue factory” i „I’m done”, po czym wszystko się zatrzymuje i kończy.

Czy mogę to zrobić prościej?

Oczywiście! Możesz to zrobić!

Możesz zauważyć, że tworzenie myObservable ma zbyt dużo kodu i wygląda niechlujnie. RxJava daje nam kilka wymyślnych skrótów.

Kilka z tych skrótów to metody takie jak Observable.just() i Observable.from();

Observable.just() emituje tylko jeden pojedynczy element, a Observable.from() emituje jeden element po drugim z listy elementów.

Zamknij się! Daj mi jakiś wymyślny kod!

Przykład 2

W tym przykładzie zrobimy to samo co w Przykładzie 1, ale teraz z mniejszą ilością kodu.

Utwórzmy nasz nowy wymyślny, dobrze wyglądający Observable:

Wow! Wygląda na to, że nasz Observable trochę schudł!
Twórzmy Subscriber:

Subscriber jest taki sam!
Teraz połącz je i czekaj, aż stanie się magia!

Wynik:

I/System.out: Blue Factory
I/System.out: I’m done

Jak widać, udaje nam się wykonać nasze zadanie, i zrobić dokładnie to samo przy użyciu mniejszej ilości kodu.
Zamknij się! Daj mi jakiś wymyślny kod!

Przykład 3

W tym przykładzie zrobimy coś trochę inaczej z Observable.from(). Chodzi o to, aby wypisać ciągi „Blue”, „Factory”, „Blog”, „Post”.
Przypomnijmy sobie czym jest Observable.from(). Observable.from() odbiera listę elementów i wypisuje na niej element po elemencie, więc Observable.from() jest dokładnie tym, czego potrzebujemy!
Najpierw stworzymy ArrayList z łańcuchami:

Stwórzmy ten Observable.from(), shall we?

Jak widać, Observable.from() otrzymuje jako argument ArrayList załadowaną Stringami. Teraz stwórzmy Subscriber i połączmy je ze sobą, i czekajmy na magię.

Result:

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

Jak widzisz, znowu udało nam się wykonać nasze zadanie!
Wszystko, czego nauczyłeś się do tej pory, to podstawowe sztuczki, ale teraz zrobimy kilka „trudniejszych” sztuczek!

Czym są Operatory w Rx?

Operatory to metody stworzone do rozwiązywania problemów z transformacjami i obsługą wywołań API. Pokażę jeden prosty przykład transformacji z Mapą, a być może w kilku kolejnych artykułach przykłady obsługi wywołań API z Retrofit, RxJava na MVP architecture pattern.

Na przykład dołączmy do naszego „Blue Factory” String z ” Blog Post”. Możemy to zrobić na kilka sposobów.

Pierwszy sposób:

Możemy to zrobić w Observable, ale Observable ma emitować elementy, a nie je zmieniać.
Drugi sposób:

Ta sama historia, Subscriber nie miał zmieniać elementów.
Rozwiązaniem jest dodanie jeszcze jednego kroku, poprzez dodanie Operatora. Operator jest dodatkowym krokiem pomiędzy Observable i Subscriber, gdzie obiekt może być przekształcony.
Zróbmy to więc we właściwy sposób!
Zamknij się! Daj mi jakiś wymyślny kod!

Przykład 4

Najpierw stwórzmy Observable:

Zauważ, że myObservable emituje tylko jeden niezmieniony element.
Teraz stwórzmy Operator, dla tego przykładu najlepszym rozwiązaniem jest użycie operatora Map. Operator Map może przekształcić nasz obiekt w dowolny sposób i zwrócić go do Subskrybenta.

W wywołaniu metody (String s) dokonywana jest transformacja String „Blue Factory”.
A oto Subscriber:

Result:

I/System.out: Blue Factory Blog Post

Ten przykład reprezentuje maleńki ułamek tego, co potrafią Operatory. Na przykład, operator Map może być ułożony na stosie wiele razy, jak w przykładzie poniżej:
Zamknij się! Give me some fancy code!

Przykład 5

Operatory mogą również zmieniać typ emitowanego elementu jak w przykładzie poniżej:
Shut up! Daj mi jakiś wymyślny kod!

Przykład 6

W tym przykładzie Observable wyemituje String „5”, a Operator przekształci go na Integer 5. Let’s crate Observable.

Zauważmy, że typ myObservable jest Observable i Observable emituje String.
Twórzmy operator Map!

Zauważmy, że metoda operator Map call(String s) otrzymuje String i zwraca Integer.
Zakładamy Subscriber i łączymy je ze sobą.

Typ Subscriber jest taki sam jak typ Observable, a typ zwracający Operators (Integer).
Tutaj pokazuję tylko mały ułamek obrazu. Z operatorami możesz zrobić wszystko co chcesz! A najlepsze w tym wszystkim jest to, że RxJava posiada mnóstwo różnych operatorów. Tutaj możesz sprawdzić wszystkie operatory: https://github.com/ReactiveX/RxJava/wiki/Alphabetical-List-of-Observable-Operators.

W podsumowaniu Operatory są potężne dla transformacji obiektów i polerowania danych, a po tym wszystkim, twój kod będzie wyglądał ładnie i czysto!

Co mogę zrobić z RXJava?

Możesz zrobić wszystko co chcesz, ponieważ twój Observable może być wszystkim, może być: String, Integer, wywołanie API, kliknięcie itp. W miarę postępów jako programista Androida będziesz używał RxJava głównie do wywołań API i dla widżetów androida. RxJava zapewnia łatwą obsługę API, ponieważ nie musisz się martwić o gwintowanie i możesz łańcuchować kilka żądań i uzyskać wynik na pojedynczym subskrybencie. Z RxJava można obsługiwać niektóre zachowania widżetów, na przykład co widżet zrobi po pięciokrotnym naciśnięciu, lub można utworzyć obserwowalne, które będą emitować String co 4 sekundy z wejścia EditText, i wiele innych wymyślnych rzeczy. Mam nadzieję, że ten artykuł dał ci podstawy RxJavy i mam nadzieję, że będziesz kontynuował eksplorację RxJavy w przyszłości.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.