de Ahmed Rizwan
RxAndroid și Retrofit 2.0

Ok, deci acest lucru nu este nou sau nimic, dar m-am gândit să facem un tutorial simplu cu noul Retrofit 2.0. Acest lucru ar trebui să ne ofere un punct de plecare.
Acesta nu este un tutorial pentru RxAndroid. Dacă nu știți multe despre RxAndroid, ar trebui să verificați mai întâi acest afară.
Să intrăm în el atunci. Iată ce aveți nevoie înainte de a începe:
- RxAndroid și Retrofit
- Gson (Voi folosi Gson, puteți utiliza și alte analize)
- O conexiune la internet!
Deci, după ce ați adăugat dependențele, fișierele dvs. gradle ar trebui să arate cam așa (ignorați fișierul Retrolambda plugin, tocmai l-am adăugat pentru concizie de cod deoarece … Lambdas! * _ *):
Acum s-ar putea să vă întrebați, ce este exact Retrofit? Ei bine, Retrofit este un client HTTP, dar este sigur de tip. Asta înseamnă că puteți transforma un API HTTP într-o interfață Java. Acest lucru face ridicol de convenabil interacțiunea cu API-ul.
Exemplul de pornire
În exemplu, voi folosi API OpenWeather și o voi păstra cât mai simplu posibil. Voi primi doar prognoza meteo pentru astăzi în trei pași.
Pasul 1: Generați clase Java Model (Pojo) din JSON
Iată URL-ul API:
http://api.openweathermap.org/data/2.5/weather?q=London
Și răspunsul returnat atunci când îl sunați este:
{ “coord”: { “lon”: -0.13, “lat”: 51.51 }, “weather”: [ { “id”: 521, “main”: “Rain”, “description”: “shower rain”, “icon”: “09d” } ], “base”: “cmc stations”, “main”: { “temp”: 289.49, “pressure”: 993, “humidity”: 67, “temp_min”: 285.93, “temp_max”: 291.15 }, “wind”: { “speed”: 8.7, “deg”: 210, “gust”: 14.4 }, “rain”: { “1h”: 1.02 }, “clouds”: { “all”: 40 }, “dt”: 1442242382, “sys”: { “type”: 1, “id”: 5091, “message”: 0.0052, “country”: “GB”, “sunrise”: 1442208848, “sunset”: 1442254609 }, “id”: 2643743, “name”: “London”, “cod”: 200}
Pare destul de dezordonat, nu? Ei bine, nu vă faceți griji, mergeți la acest minunat site-ul web și lipiți în JSON. Va ieși așa:

Dacă JSON trebuie să genereze multe clase de model, cel mai ușor de făcut este să generezi un Borcan și descărcați-l, extrageți-l și apoi adăugați fișierele. În caz contrar, faceți clic pe Previzualizare și copiați-lipiți clasele de care aveți nevoie. Scoateți @Generated („org.jsonschema2pojo”) din fiecare clasă de model, deoarece această adnotare nu este recunoscută de Android în mod prestabilit.
Am descărcat Jarul, deoarece există o mulțime de clase. Și, de asemenea, pentru că sunt leneș. 🙂
După extragerea și adăugarea claselor, acum arborele proiectului arată așa:

Până acum, bine!

Pasul 2: Creați o interfață de adaptare pentru apelurile dvs. API
Pentru Retrofit, trebuie să creați o interfață pentru punctele finale ale API-ului dvs.
Când creați interfața, ar trebui să vă întrebați: care este sensul vieții? Și în al doilea rând: de ce informații am nevoie de la API?
Pentru mine, răspunsul la ambele întrebări este WeatherData (cel mai de sus obiect). Acum să examinăm adresa URL:
http://api.openweathermap.org/data/2.5/weather?q=London
Există un interogare chiar la final, așa că voi face acest lucru:

Note: in Retrofit 2.0, the endpoint path string should NOT start with “/”
@GET("/weather?") --> [email protected]("weather?") --> correct
Acum, ca parametru, voi trimite valoarea interogării folosind adnotarea @Query.
După cum veți observa, vă întorc Observabil din WeatherData. Acesta este Rx chiar acolo!
Pasul 3: Creați adaptorul de adaptare și instanța WeatherService
Acum, în Activitatea noastră, trebuie să creăm un adaptor de adaptare utilizând adresa URL de bază, împreună cu alte informații. Odată construit, putem iniția un obiect de WeatherService interfață, apoi apelați metoda.
Aruncați o privire la acest cod delicios:
Deci, întrebarea aici este ce naiba sunt acelea addCallAdapter și addConverterFactory metodele care fac acolo?
Ei bine, pentru ca apelurile noastre să revină Observabil, trebuie să setăm adaptorul de apel la RxJavaCallAdapter.
Și addConverFactory este acolo pentru a spune Retrofit ce tip de convertor vreau să folosească pentru serializarea JSON. Prefer convertorul GSON. Există și alte convertoare disponibile.
Deci, pentru aceste două trebuie să le adăugați dependențele la gradle:
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'compile 'com.squareup.retrofit2:converter-gson:2.0.0'
Acum rulați codul și voila! Se va înregistra descrierea vremii.
Un exemplu diferit
Deci da … Un alt exemplu! Pentru că de ce nu? De data aceasta, voi încerca API-ul GitHub. Din nou doar 3 pași.
Mai întâi, adresa URL a apelului API:
https://api.github.com/users/ahmedrizwan
și răspunsul:
{ "login": "ahmedrizwan", "id": 4357275, "avatar_url": "https://avatars.githubusercontent.com/u/4357275?v=3", "gravatar_id": "", "url": "https://api.github.com/users/ahmedrizwan", "html_url": "https://github.com/ahmedrizwan", "followers_url": "https://api.github.com/users/ahmedrizwan/followers", "following_url": "https://api.github.com/users/ahmedrizwan/following{/other_user}", "gists_url": "https://api.github.com/users/ahmedrizwan/gists{/gist_id}", "starred_url": "https://api.github.com/users/ahmedrizwan/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/ahmedrizwan/subscriptions", "organizations_url": "https://api.github.com/users/ahmedrizwan/orgs", "repos_url": "https://api.github.com/users/ahmedrizwan/repos", "events_url": "https://api.github.com/users/ahmedrizwan/events{/privacy}", "received_events_url": "https://api.github.com/users/ahmedrizwan/received_events", "type": "User", "site_admin": false, "name": "ahmed", "company": null, "blog": "https://medium.com/@ahmedrizwan", "location": null, "email": "[email protected]", "hireable": true, "bio": null, "public_repos": 19, "public_gists": 0, "followers": 25, "following": 16, "created_at": "2013-05-06T18:32:59Z", "updated_at": "2016-07-08T11:29:26Z"}
Din nou, JSON arată destul de dezordonat.
Pasul 1: Generați Pojos (obiecte Java vechi simple)
Am copiat răspunsul și l-am lipit aici (încă o dată):


Și a făcut clic pe Previzualizare.
Apoi am copiat clasa Github în Proiectul meu. * muzica se intensifica *
Pasul 2: Creați interfață pentru puncte finale
Acum examinați URL-ul API. Și vreau să spun, examinează-l cu adevărat. Veți vedea că punctul final începe de la utilizatori și se termină cu numele de utilizator.
https://api.github.com/users/ahmedrizwan
Deci interfața pe care am creat-o arată astfel:

Am creat o metodă de apel și am folosit @Cale adnotare pentru a înlocui valoarea {nume de utilizator} în șirul EndPoint dinamic.
Pasul 3: Creați adaptorul și instanța GithubService
Iată codul minunat pentru a face exact acest lucru:

Veți observa că mapez obiectul utilizatorului pe String (puteți face asta cu Rx. Deci ieșirea sa devine:

Deci asta este. Deși articolul nu acoperă tot ce poate face Retrofit și RxAndroid (bineînțeles), sper că vă va oferi un început bun.
Codificare fericită!