de Ahmed Rizwan

RxAndroid și Retrofit 2.0

RxAndroid si Retrofit 20

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:

  1. RxAndroid și Retrofit
  2. Gson (Voi folosi Gson, puteți utiliza și alte analize)
  3. 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.

ad-banner

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:

1611295445 291 RxAndroid si Retrofit 20

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:

1611295445 45 RxAndroid si Retrofit 20

Până acum, bine!

1611295446 388 RxAndroid si Retrofit 20
Doar un raton rău fiind rău.

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:

1611295446 916 RxAndroid si Retrofit 20
Note: in Retrofit 2.0, the endpoint path string should NOT start with “/” 
@GET("/weather?") --> incorrect@GET("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": "ahmedrizwan@outlook.com",    "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ă):

1611295447 572 RxAndroid si Retrofit 20
1611295448 491 RxAndroid si Retrofit 20

Ș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:

1611295448 4 RxAndroid si Retrofit 20

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:

1611295449 728 RxAndroid si Retrofit 20

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

1611295449 365 RxAndroid si Retrofit 20

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ă!