Sunteți pe pagina 1din 18

Simplificando chamadas

HTTP com o Retrofit


Felipe Pedroso

felipeapedroso

felipepedroso
Cenrio Rest APIs

API
HttpURLConnection urlConnection = null;
URL url = null;

try {
HTTP Request url = new
URL("http://api.themoviedb.org/3/movie/upcoming?api_key=<KEY>");

Cdigo extenso urlConnection = (HttpURLConnection) url.openConnection();


urlConnection.setRequestMethod("GET");
Tratamento de erros? urlConnection.connect();

InputStream inputStream = urlConnection.getInputStream();


Aonde esto os filmes? BufferedReader reader = new BufferedReader(new
InputStreamReader(inputStream));
(domnio do problema)
StringBuffer buffer = new StringBuffer();
JSON de Resposta em String line;
while ((line = reader.readLine()) != null) {
um String (falta o parse) buffer.append(line + "\n");
}

String jsonAnswer = buffer.toString();


} catch (IOException e) {
e.printStackTrace();
} finally {
urlConnection.disconnect();
}
Resposta
Resposta (+ bonita)
Retrofit
Biblioteca que transforma a
API HTTP em uma interface
Java
Criada pela Square Inc.
Disponvel no Github
Funciona no Android e Java
SE (Gradle, Maven e JAR)
Mas o que ele oferece?
Interface Service
public interface MoviesService {
@GET("movie/upcoming")
Call<MovieResults> listUpcomingMovies();

@GET("movie/{movieId}/similar")
Call<MovieResults> listSimilarMovies(@Path("movieId") Integer movieId);
}

Suporta @GET, @POST e @PUT


Vrios tipos de parmetros: @Query, @Path, @Header, etc
Objeto Service
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.themoviedb.org/3/")
.addConverterFactory(GsonConverterFactory.create())
.build();

MoviesService moviesService =
retrofit.create(MoviesService.class);
Resposta POJO*
{
"poster_path":"\/lFSSLTlFozwpaGlO31OoUeirBgQ.jpg", public class MovieInfo {
"adult":false,
"overview":"Jason Bourne, now remembering who he tru
private Integer id;
ly is, tries to uncover hidden truths about his past.", private String poster_path;
"release_date":"2016-07-28",
"genre_ids":[ private String title;
],
28 public Double vote_average;
"id":324668, public String release_date;
"original_title":"Jason Bourne",
"original_language":"en", public String overview;
"title":"Jason Bourne",
"backdrop_path":"\/AoT2YrJUJlg5vKE3iMOLvHlTd3m.jp
g",
"popularity":6.463538,
....
"vote_count":52, }
"video":false,
"vote_average":3.97
}

* POJO: Plain Old Java Object


Chamada Sncrona
Response<MovieResults> response = null;
try {
response = moviesService.listUpcomingMovies().execute();
MovieResults movieResults = response.body();
} catch (IOException e) {
e.printStackTrace();
}
Chamada Assncrona
moviesService.listUpcomingMovies().enqueue(new Callback<MovieResults>() {
@Override
public void onResponse(Call<MovieResults> call, Response<MovieResults> response) {
MovieResults movieResults = response.body();
}

@Override
public void onFailure(Call<MovieResults> call, Throwable t) {
// Handle failure
}
});
Outras caractersticas
Cdigo mais simples
Tratamento de erros mais fcil
Cliente HTTP plugvel (Ex.: OkHttp, ApacheHttp, etc)
Converters (Serializao) plugveis (Ex.: Gson, XML, etc)
Compatvel com RxJava (programao reativa)
Exemplo
JavaFX
github.com/felipepedroso/Upco
mingMoviesFX
Console
github.com/felipepedroso/Upco
mingMoviesConsole
Disponvel em:
github.com/felipepedroso/Retro
fitMoviesExample
Referncias
Retrofit Site Oficial
Retrofit Github
Realm 2 Jake Wharton
Android Libs Retrofit Daniel Gimenes

cones: https://www.iconfinder.com/AlfredoCreates
Dvidas?
Obrigado!
felipeapedroso

felipepedroso

S-ar putea să vă placă și