Înțelegând Java: RxJava pentru începători

În acest articol voi explica noțiunile de bază ale RxJava prin exemple. Acest articol este destinat începătorilor RxJava. Pe de altă parte, dacă știți deja ceva despre RxJava, acest articol este bun pentru a vă revizui cunoștințele.

RxJava este o implementare Java VM a ReactiveX o bibliotecă pentru compunerea de programe asincrone și bazate pe evenimente prin utilizarea de secvențe observabile.

Blocurile de construcție ale RxJava sunt Observables și Subscribers. Observable este utilizat pentru a emite elemente, iar Subscriber este utilizat pentru a consuma aceste elemente. Poate că unii dintre voi se vor gândi: „Hmmm, acest lucru este foarte asemănător cu modelul Observable standard”. Și da, așa este, dar RxJava o face mult mai bine și are mai multe opțiuni. De exemplu, deseori, Observables nu încep să emită elemente până când cineva nu se abonează la ele. Aceasta este o caracteristică grozavă, deoarece în acest fel ar trebui să vă economisiți performanțele.

RxJava funcționează astfel. Subscriber se abonează la Observable, apoi Observable apelează Subscriber.onNext() pentru orice număr de elemente, dacă ceva nu merge bine, aici este Subsciber.onError() și dacă totul se termină bine, aici este Subscriber.onCompleted(). Vedeți că este ușor!

Tăceți din gură! Dați-mi niște coduri fanteziste!

Exemplu 1

În acest exemplu vom crea Observable și Subscriber de bază, apoi le vom lega între ele și vom vedea ce se va întâmpla. Alertă de spoiler! Ceva grozav…

Să creăm un Observable de bază:

Observabilul creat emite șirul „Blue Factory” și apoi se finalizează. Șirul „Blue Factory” va fi primit la metoda onNext() a subscriitorilor. Acum să creăm Subscriber.

Subscriber primește valoarea String-ului la metoda onNext() și o tipărește, de asemenea String-ul „I’m done” se tipărește atunci când este apelată metoda onCompleted().

Acum le leagă.

Rezultat:

I/System.out: Blue Factory

I/System.out: Am terminat

Când se întâmplă abonarea, myObservable apelează metodele mySubscription onNext() și onComplited(). Rezultatele sunt ieșirile „Blue factory” și „I’m done”, după care totul se oprește și se termină.

Pot să o fac mai simplu?

Desigur! Puteți să o faceți!

Poate observați că o creare a myObservable are prea mult cod și arată dezordonat. RxJava ne oferă câteva prescurtări fanteziste.

Câteva dintre aceste prescurtări sunt metode precum Observable.just() și Observable.from();

Observable.just() emite doar un singur element, iar Observable.from() emite câte un singur element dintr-o listă de elemente.

Tăceți! Dă-mi niște cod fantezist!

Exemplu 2

În acest exemplu vom face același lucru ca în Exemplul 1, dar acum cu mai puțin cod.

Să creăm noul nostru Observable fantezist și arătos:

Wow! Se pare că Observabilul nostru a pierdut ceva greutate!
Să creăm Subscriber:

Subscriber este același!
Acum legați-le și așteptați să se întâmple magia!

Rezultat:

I/System.out: Blue Factory
I/System.out: Am terminat

Cum vedeți, reușim să ne îndeplinim sarcina, și să facem exact același lucru cu mai puțin cod.
Tăceți! Dați-mi niște cod fantezist!

Exemplu 3

În acest exemplu vom face ceva puțin diferit cu Observable.from(). Ideea este de a imprima șirurile de caractere „Blue”, „Factory”, „Blog”, „Post”.
Să ne reamintim ce este Observable.from(). Observable.from() primește lista de elemente și emite pe fiecare element în parte, deci Observable.from() este exact ceea ce avem nevoie!
Prima dată vom crea ArrayList cu șiruri de caractere:

Să creăm acel Observable.from(), da?

După cum vedeți, Observable.from() primește ca argument ArrayList încărcat cu Strings. Acum, să creăm Subscriber și să le legăm, și să așteptăm magia.

Rezultat:

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

Cum vedeți, am reușit să ne îndeplinim din nou sarcina cu succes!
Tot ce ați învățat până acum sunt pure trucuri de bază, dar acum vom face câteva trucuri mai „grele”!

Ce sunt Operatorii în Rx?

Operatorii sunt metode create pentru rezolvarea transformărilor și tratarea problemelor legate de apelurile API. Vă voi arăta un exemplu simplu de transformare cu Map, și poate în alte articole exemple de gestionare a apelurilor API cu Retrofit, RxJava pe modelul arhitectural MVP.

De exemplu, să adăugăm șirul nostru „Blue Factory” cu ” Blog Post”. Putem face acest lucru în mai multe moduri.

Primul mod:

Putem face acest lucru în Observable, dar Observable trebuie să emită elemente, nu să le modifice.
A doua cale:

Aceeași poveste, Subscriber nu trebuia să schimbe elemente.
Soluția este de a adăuga încă un pas, prin adăugarea de Operator. Operator este un pas suplimentar între Observable și Subscriber, unde obiectul poate fi transformat.
Așa că haideți să o facem în mod corect!
Căutați! Dați-mi niște coduri sofisticate!

Exemplu 4

În primul rând, să creăm Observable:

Observați că myObservable emite doar un singur element neschimbat.
Acum să creăm Operator, pentru acest exemplu, cea mai bună soluție este să folosim operatorul Map. Operatorul Map poate transforma obiectul nostru într-un mod pe care îl dorim și îl poate returna către Subscriber.

În apelul operatorului (String s) se face transformarea metodei String „Blue Factory”.
Și iată Subscriber:

Rezultat:

I/System.out: Blue Factory Blog Post

Acest exemplu reprezintă o mică parte din ceea ce pot face operatorii. De exemplu, Operatorul Hartă poate fi stivuit de mai multe ori ca în exemplul de mai jos:
Shut up! Dă-mi niște cod fantezist!

Exemplu 5

Operatorii pot, de asemenea, să schimbe tipul elementului emis ca în exemplul de mai jos:
Shut up! Dă-mi niște coduri sofisticate!

Exemplu 6

În acest exemplu Observable va emite șirul de caractere „5” și operatorul îl va transforma în întreg 5. Să creăm Observable.

Observați că tipul myObservable este Observable și Observable emite String.
Să creăm operatorul Map!

Observați că metoda Map operator call(String s) primește String și returnează Integer.
Să creăm Subscriber și să le legăm.

Tipul Subscriber este același ca și tipul Observable, iar tipul Operators returning type (Integer).
Aici vă arăt doar o mică parte din imagine. Cu ajutorul operatorilor puteți face tot ceea ce vă doriți! Iar partea cea mai bună este că RxJava dispune de o multitudine de operatori diferiți. Aici puteți verifica toți operatorii: .

În concluzie, Operatorii sunt puternici pentru transformarea obiectelor și lustruirea datelor, iar după toate acestea, codul dvs. va arăta frumos și curat!

Ce pot face cu RXJava?

Puteți face tot ce doriți, deoarece Observable-ul dvs. poate fi orice, poate fi: String, Integer, apel API, click, etc. Pe măsură ce progresați ca dezvoltator Android, veți folosi RxJava mai ales pentru apeluri API și pentru widget-uri Android. RxJava oferă o manipulare ușoară a API, deoarece nu trebuie să vă faceți griji cu privire la threading și puteți înlănțui câteva cereri și obține rezultatul pe un singur abonat. Cu RxJava puteți gestiona anumite comportamente ale widget-urilor, de exemplu, ce va face widget-ul după ce este apăsat de cinci ori, sau puteți crea Observable care va emite String la fiecare 4 secunde de la intrarea EditText și multe alte lucruri interesante. Sper că acest articol vă oferă noțiuni de bază despre RxJava și sper că veți continua să explorați RxJava în viitor.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.