Forståelse af Java: RxJava for begyndere

I denne artikel vil jeg forklare det grundlæggende i RxJava gennem eksempler. Denne artikel er for RxJava nybegyndere. På den anden side, hvis du allerede ved noget om RxJava, er denne artikel god til at gennemgå din viden.

RxJava er en Java VM-implementering af ReactiveX et bibliotek til sammensætning af asynkrone og begivenhedsbaserede programmer ved hjælp af observerbare sekvenser.

Byggeklodserne i RxJava er Observables og Subscribers. Observable bruges til at udsende elementer, og Subscriber bruges til at forbruge disse elementer. Måske vil nogle af jer tænke: “Hmmm dette ligner så meget standard Observable-mønsteret”. Og ja, det er det, men RxJava gør det meget bedre og har flere muligheder. For eksempel begynder Observables ofte ikke at udsende elementer, før nogen abonnerer på dem. Dette er en god funktion, fordi du på denne måde skal spare dine performances.

RxJava fungerer på denne måde. Subscriber abonnerer på Observable, derefter kalder Observable Subscriber.onNext() for et vilkårligt antal elementer, hvis noget går galt er her Subsciber.onError(), og hvis alt slutter fint, er her Subscriber.onCompleted(). Du kan se, at det er nemt!

Skål! Giv mig nogle smarte koder!

Eksempel 1

I dette eksempel vil vi oprette grundlæggende Observable og Subscriber, og så vil vi sammenkoble dem, og se hvad der vil ske. Spoiler alert! Noget fantastisk…

Lad os oprette en grundlæggende Observable:

Skabt Observable udsender “Blue Factory” String og afsluttes derefter. “Blue Factory”-strengen vil blive modtaget på Subscribers onNext()-metoden. Lad os nu oprette Subscriber.

Subscriber modtager String-værdi på onNext()-metoden og udskriver den, også String “I’m done” udskrives, når onCompleted()-metoderne kaldes.

Link dem nu sammen.

Resultat:

I/System.out: Blue Factory

I/System.out: I’m done

Når abonnement sker, kalder myObservable mySubscription onNext() og onComplited() metoderne. Resultaterne er output “Blue factory” og “I’m done”, hvorefter alt stopper og afsluttes.

Kan jeg gøre det mere simpelt?

Selvfølgelig! Du kan gøre det!

Du vil måske bemærke, at en oprettelse af myObservable har for meget kode, og det ser rodet ud. RxJava giver os nogle smarte genveje.

Nogle af disse genveje er metoder som Observable.just() og Observable.from();

Observable.just() udsender kun et enkelt element, og Observable.from() udsender et element efter et fra en liste af elementer.

Hold kæft! Giv mig noget fancy kode!

Eksempel 2

I dette eksempel vil vi lave det samme som i eksempel 1, men nu med mindre kode.

Lad os oprette vores nye fancy, flotte Observable:

Wow! Det ser ud til, at vores Observable har tabt noget vægt!
Lad os oprette Subscriber:

Subscriber er den samme!
Link dem nu sammen, og vent på, at magien sker!

Resultat:

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

Som du ser, lykkes det os at fuldføre vores opgave, og gøre præcis det samme med mindre kode.
Skål! Giv mig noget fancy kode!

Eksempel 3

I dette eksempel vil vi gøre noget lidt anderledes med Observable.from(). Ideen er at udskrive strings “Blue”, “Factory”, “Blog”, “Post”.
Lad os lige minde os selv om, hvad Observable.from() er. Observable.from() modtager listen over elementer og udsender element for element, så Observable.from() er præcis, hvad vi har brug for!
Først vil vi oprette ArrayList med strenge:

Lad os oprette denne Observable.from(), skal vi?

Som du kan se, modtager Observable.from() som argument ArrayList indlæst med Strings. Lad os nu oprette Subscriber og linke dem sammen og vente på magien.

Resultat:

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

Som du kan se, har vi klaret vores opgave med succes igen!
Alt, hvad du har lært indtil nu, er rene grundlæggende tricks, men nu skal vi lave nogle “sværere” tricks!

Hvad er Operatorer i Rx?

Operatorer er metoder, der er skabt til at løse problemer med transformationer og håndtering af API-opkald. Jeg vil vise dig et enkelt eksempel på transformation med Map, og måske i nogle yderligere artikler eksempler på håndtering af API-opkald med Retrofit, RxJava på MVP-arkitekturmønsteret.

Til eksempel lad os føje vores “Blue Factory” String med ” Blog Post”. Vi kan gøre det på flere måder.

Første måde:

Vi kan gøre det i Observable, men Observable skal udsende elementer, ikke ændre dem.
Den anden måde:

Samme historie, Subscriber skulle ikke ændre elementer.
Løsningen er at tilføje endnu et trin, ved at tilføje Operator. Operator er et ekstra trin mellem Observable og Subscriber, hvor objektet kan transformeres.
Så lad os gøre det på den rigtige måde!
Skål! Giv mig noget smart kode!

Eksempel 4

Først skal vi oprette Observable:

Bemærk, at myObservable kun udsender ét uændret objekt.
Nu skal vi oprette Operator, for dette eksempel er den bedste løsning at bruge Map-operatoren. Map-operatoren kan transformere vores objekt på en måde, vi kan lide og returnere det til Subscriber.

I operators call (String s) method transformation of String “Blue Factory” is done.
Og her er Subscriber:

Resultat:

I/System.out: Blue Factory Blog Post

Dette eksempel repræsenterer en lille brøkdel af, hvad Operators kan gøre. For eksempel kan Map-operatoren stables flere gange som i eksemplet nedenfor:
Shut up! Giv mig noget smart kode!

Eksempel 5

Operatorer kan også ændre typen af udsendt element som i eksemplet nedenfor:
Sluk nu! Giv mig noget smart kode!

Eksempel 6

I dette eksempel vil Observable udsende strengen “5”, og Operator vil omdanne den til det hele tal 5. Lad os oprette Observable.

Bemærk, at typen myObservable er Observable, og at Observable udsender String.
Lad os oprette Map-operatoren!

Bemærk, at Map-operatoren call(String s)-metoden modtager String og returnerer Integer.
Lad os kasse Subscriber og sammenkæde dem.

Subscriber type er den samme som Observable type, og Operators returnerende type (Integer).
Her viser jeg dig bare en lille brøkdel af billedet. Med operator’s kan du gøre alt hvad du vil! Og det bedste ved dette er, at RxJava har en overflod af forskellige Operators. Her kan du tjekke alle operatorer: https://github.com/ReactiveX/RxJava/wiki/Alphabetical-List-of-Observable-Operators.

Indledningsvis er Operators stærke til objekttransformation og datapolering, og efter alt dette vil din kode se pæn og ren ud!

Hvad kan jeg gøre med RXJava?

Du kan gøre alt, hvad du vil, fordi din Observable kan være alt, det kan være: Det kan være alt: String, Integer, API-kald, klik osv. Efterhånden som du udvikler dig som Android-udvikler, vil du bruge RxJava mest til API-opkald og til android-widgets. RxJava giver nem API-håndtering, fordi du ikke behøver at bekymre dig om threading, og du kan kæde nogle få anmodninger og få resultatet på en enkelt abonnent. Med RxJava kan du håndtere nogle widgets adfærd for eksempel hvad widget vil gøre efter fem gange at blive trykket, eller du kan oprette Observable som vil udsender String hver 4 sek. fra EditText input, og så mange andre fancy ting. Jeg håber, at denne artikel giver dig det grundlæggende i RxJava, og jeg håber, at du vil fortsætte med at udforske RxJava i fremtiden.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.