Lecția 1

Această lecție începe cu Observer Pattern și vom afla cum este folosit în RxJava. Luați în considerare conceptele de bază: observabil și observator și ce tipuri de evenimente le utilizează. Apoi, vom analiza un exemplu teoretic și unul practic.







Versiunile lui RxJava

Înainte de a începe să discutăm mecanismele lui RxJava, să reamintim modelul Observer. Are un obiect care generează unele evenimente și există un obiect sau obiecte care abonează și primește aceste evenimente. Cred că în munca pe care o folosiți în mod constant acest model. Cel mai simplu exemplu este butonul de preluare a butonului de butoane.

Java are chiar și unelte pentru acest model - clasa observabilă și interfața Observer. Implementarea interfeței Observer este obiectul așteptat de eveniment. Observabil este o clasă care va spune tuturor obiectelor Observerului care i-au fost transmise că evenimentul a avut loc.

Aceleași nume sunt folosite în RxJava. Și semnificația lor a rămas aceeași: Observabil generează un eveniment, iar Observatorul îl primește. Dar însăși noțiunea de "eveniment" a fost în mod semnificativ extinsă. În RxJava, evenimentele pe care observatorul le trimite observatorului pot fi tratate ca un flux de date. Iar evenimentele din acest thread sunt de trei tipuri:
1) În continuare - o altă piesă de date
2) Eroare - a apărut o eroare.
3) Finalizat - firul este terminat și datele nu vor mai fi.

De exemplu, să examinăm căutarea de zboruri. Să avem o metodă care să poată rula pe site-urile web ale companiilor aeriene, să caute criteriile necesare acolo și să returneze toate zborurile primite către noi. Îi oferim destinația, punctul de plecare, data - și începe să lucreze.

Pe măsură ce procesează site-urile unul câte unul, generează evenimentele următoare, cărora le trimite rezultatul. Ie fiecare zbor găsit este un nou eveniment Următor.

Dacă s-a produs o eroare gravă în lucrul cu metoda și munca nu poate fi continuată, metoda va trimite evenimentul Error.

Dacă metoda gestionează cu succes toate site-urile cunoscute și termină, ne va trimite evenimentul Finalizat.


Care sunt locurile din acest sistem observabil și observator? Metoda de returnare a apelurilor ne returnează un obiect Obișnuit. Și vom crea Observer, în care vom scrie codul pentru procesarea evenimentelor recepționate și vom abona la acest Observator. Pe măsură ce metoda funcționează, Observabil va genera evenimente pe care le vom primi în Observerul nostru creat:
- dacă evenimentul Următor a sosit cu zborul următor, luați zborul și, de exemplu, îl adăugați la adaptorul de liste. Astfel, zborurile vor apărea unul câte unul în listă, așa cum se găsesc.






- dacă sa produs evenimentul Finalizat, putem să dezactivați ProgressBar și să anunțați utilizatorul că procesul de căutare a fost finalizat
- dacă a apărut un eveniment de eroare, informăm utilizatorul că căutarea a fost întreruptă cu o eroare

În acest exemplu, am descris toate cele trei tipuri de evenimente pentru a clarifica de ce sunt necesare. Dar, nu neapărat în fiecare flux de date, veți întâlni toate aceste tipuri. De exemplu, Observabil, care ne spune despre apăsarea butonului. În acest caz, vom primi doar evenimentul Următor la fiecare clic. Evenimentul Completed nu vine la noi, deoarece utilizatorul poate apăsa acest buton ori de câte ori este necesar și nu va mai fi niciun click ultima acolo. Ei bine, este puțin probabil să greșim aici.


Sper că, după această introducere și exemple, aveți o înțelegere a rolului obiectelor Observabile și Observer. Cel mai dificil la început - este doar să-i distingem unul de celălalt)

Să ne uităm la cel mai simplu exemplu de observabil.

Crearea unei imagini observabile arată astfel:

observabil - această descriere înseamnă că Observabil va furniza date de tip String, adică fiecare următor eveniment care va genera va veni cu un obiect de tip String. Metoda Observable.from creează pentru noi o imagine observabilă care va prelua date din matricea String specificată și o va transmite destinatarilor

Creați destinatarul, adică observator:

observator - tipul de date al tipului String. Permiteți-mi să vă reamintesc că el din Observabil așteaptă să primească evenimente din cele trei tipuri Next, Error and Completed. Și pentru fiecare tip, Observer are propria sa metodă cu același nume:
onNext (String s) - această metodă va primi date
onError (Throwable e) - va fi apelat în cazul unei erori și intrarea va primi date de eroare
onCompleted () - notificare că toate datele au fost transferate

Sunt create ambele obiecte, rămâne să semnați Observatorul la Observabil utilizând metoda de abonare:

Imediat după abonament Observator observabil pentru a da toate datele (în metoda onNext) și un semnal că transferul este complet (metoda OnCompleted).


Acest exemplu simplu are rolul de a arăta interacțiunea dintre Observator și Observator. Am folosit Observabil în el, care poate transfera date din matricea oferită. Dar acesta este doar unul dintre tipurile de observabil. Apoi vom învăța cum să creați diverse funcții Observabile.

Ce urmează

Când am început să studiez RxJava pentru prima oară, după ce am examinat astfel de exemple, am avut întrebări precum:
- La ce punct au început evenimentele Generatoare ale evenimentelor observabile: după crearea sau după ce sa abonat la acesta Observator?
- Ce se va întâmpla dacă semnez mai mulți observatori: toți își primesc datele sau cei care au semnat ulterior nu vor primi nimic?
- Cum creez observabilul meu care va trimite ieșirea din codul meu?
- Cum pot face lucrarea observabilă într-un fir (în sensul Thread) și rezultatele vin în cealaltă?

Ca studiu suplimentar și experimentare, aceste probleme au fost rezolvate cu succes și voi spune despre toate acestea în următoarele lecții ale acestui curs.

În plus, vom analiza ce funcții de lucru cu fluxurile de date oferă RxJava. De exemplu, puteți prelua un flux de date și efectua conversii diferite pe acesta: filtrați datele sau convertiți datele de la un tip la altul. Puteți combina datele din diferite fluxuri de date în serie, în paralel sau în perechi.

De asemenea, în RxJava există un instrument excelent pentru lucrul cu firele (nu este vorba despre fluxurile de date, ci despre Threads). Puteți specifica un fir pentru a genera date către Observabil, un alt fir pentru a efectua orice operație de conversie pe aceste date și un al treilea fir în care datele vor fi trimise Observatorului.

În general, subiectul este foarte interesant și util, iar acest curs vă va ajuta să îl înțelegeți.







Articole similare

Trimiteți-le prietenilor: