Suche senden
Hochladen
Simplificando chamadas HTTP com o Retrofit
•
3 gefällt mir
•
778 views
Felipe Pedroso
Folgen
Palestra apresentada durante a 15a. edição do "É dia de Java".
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 18
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Introdução ao Retrofit
Introdução ao Retrofit
Felipe Pedroso
Abusing text/template for data transformation
Abusing text/template for data transformation
Arnaud Porterie
strace for Perl Mongers
strace for Perl Mongers
Naosuke Yokoe
Py conkr 20150829_docker-python
Py conkr 20150829_docker-python
Eric Ahn
Vcs28
Vcs28
Malikireddy Bramhananda Reddy
Introduction to Guzzle
Introduction to Guzzle
DQNEO
uerj201212
uerj201212
Juan Lopes
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
Puppet
Empfohlen
Introdução ao Retrofit
Introdução ao Retrofit
Felipe Pedroso
Abusing text/template for data transformation
Abusing text/template for data transformation
Arnaud Porterie
strace for Perl Mongers
strace for Perl Mongers
Naosuke Yokoe
Py conkr 20150829_docker-python
Py conkr 20150829_docker-python
Eric Ahn
Vcs28
Vcs28
Malikireddy Bramhananda Reddy
Introduction to Guzzle
Introduction to Guzzle
DQNEO
uerj201212
uerj201212
Juan Lopes
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
Puppet
Modern javascript localization with c-3po and the good old gettext
Modern javascript localization with c-3po and the good old gettext
Alexander Mostovenko
Easy to Learn C language program
Easy to Learn C language program
Hitarth Patel
Http capturing
Http capturing
Eric Ahn
file handling
file handling
maria azam
Testing the Next Generation
Testing the Next Generation
Mike Harris
GoLang & GoatCore
GoLang & GoatCore
Sebastian Pożoga
Sol 1
Sol 1
University Of Lahore
Redis 101
Redis 101
Doğan Can
Go for the paranoid network programmer
Go for the paranoid network programmer
Eleanor McHugh
Sol9
Sol9
University Of Lahore
Hello c
Hello c
Ashish Ranjan
Thread介紹
Thread介紹
Jack Chen
Gitkata refspec
Gitkata refspec
Mateusz Grzechociński
Tugas Program C++
Tugas Program C++
Reynes E. Tekay
Sp ch05
Sp ch05
Shi-Wu Lo(Gmail)
Rabia
Rabia
university of Gujrat, pakistan
Python 3.3 チラ見
Python 3.3 チラ見
Toru Furukawa
Python And GIS - Beyond Modelbuilder And Pythonwin
Python And GIS - Beyond Modelbuilder And Pythonwin
Chad Cooper
Sol7
Sol7
University Of Lahore
Bash Scripting Gabrovo
Bash Scripting Gabrovo
Marian Marinov
Retrofit Technology Overview by Cumulations Technologies
Retrofit Technology Overview by Cumulations Technologies
Cumulations Technologies
introduce Okhttp
introduce Okhttp
朋 王
Weitere ähnliche Inhalte
Was ist angesagt?
Modern javascript localization with c-3po and the good old gettext
Modern javascript localization with c-3po and the good old gettext
Alexander Mostovenko
Easy to Learn C language program
Easy to Learn C language program
Hitarth Patel
Http capturing
Http capturing
Eric Ahn
file handling
file handling
maria azam
Testing the Next Generation
Testing the Next Generation
Mike Harris
GoLang & GoatCore
GoLang & GoatCore
Sebastian Pożoga
Sol 1
Sol 1
University Of Lahore
Redis 101
Redis 101
Doğan Can
Go for the paranoid network programmer
Go for the paranoid network programmer
Eleanor McHugh
Sol9
Sol9
University Of Lahore
Hello c
Hello c
Ashish Ranjan
Thread介紹
Thread介紹
Jack Chen
Gitkata refspec
Gitkata refspec
Mateusz Grzechociński
Tugas Program C++
Tugas Program C++
Reynes E. Tekay
Sp ch05
Sp ch05
Shi-Wu Lo(Gmail)
Rabia
Rabia
university of Gujrat, pakistan
Python 3.3 チラ見
Python 3.3 チラ見
Toru Furukawa
Python And GIS - Beyond Modelbuilder And Pythonwin
Python And GIS - Beyond Modelbuilder And Pythonwin
Chad Cooper
Sol7
Sol7
University Of Lahore
Bash Scripting Gabrovo
Bash Scripting Gabrovo
Marian Marinov
Was ist angesagt?
(20)
Modern javascript localization with c-3po and the good old gettext
Modern javascript localization with c-3po and the good old gettext
Easy to Learn C language program
Easy to Learn C language program
Http capturing
Http capturing
file handling
file handling
Testing the Next Generation
Testing the Next Generation
GoLang & GoatCore
GoLang & GoatCore
Sol 1
Sol 1
Redis 101
Redis 101
Go for the paranoid network programmer
Go for the paranoid network programmer
Sol9
Sol9
Hello c
Hello c
Thread介紹
Thread介紹
Gitkata refspec
Gitkata refspec
Tugas Program C++
Tugas Program C++
Sp ch05
Sp ch05
Rabia
Rabia
Python 3.3 チラ見
Python 3.3 チラ見
Python And GIS - Beyond Modelbuilder And Pythonwin
Python And GIS - Beyond Modelbuilder And Pythonwin
Sol7
Sol7
Bash Scripting Gabrovo
Bash Scripting Gabrovo
Andere mochten auch
Retrofit Technology Overview by Cumulations Technologies
Retrofit Technology Overview by Cumulations Technologies
Cumulations Technologies
introduce Okhttp
introduce Okhttp
朋 王
Retrofit
Retrofit
Amin Cheloh
Infinum Android Talks #16 - Retrofit 2 by Kristijan Jurkovic
Infinum Android Talks #16 - Retrofit 2 by Kristijan Jurkovic
Infinum
Retrofit 2 - O que devemos saber
Retrofit 2 - O que devemos saber
Bruno Vieira
Retrofit
Retrofit
bresiu
Developer Relations 101
Developer Relations 101
Felipe Pedroso
Assistive Context-Aware Toolkit (Portuguese)
Assistive Context-Aware Toolkit (Portuguese)
Felipe Pedroso
大鱼架构演进
大鱼架构演进
Jun Liu
Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss
Andres Almiray
Seismic retrofit methods
Seismic retrofit methods
Paul McMullin
Staying Afloat with Buoy: A High-Performance HTTP Client
Staying Afloat with Buoy: A High-Performance HTTP Client
lpgauth
Desenvolvendo interfaces ricas em java fx para ultrabook final
Desenvolvendo interfaces ricas em java fx para ultrabook final
Felipe Pedroso
Andere mochten auch
(13)
Retrofit Technology Overview by Cumulations Technologies
Retrofit Technology Overview by Cumulations Technologies
introduce Okhttp
introduce Okhttp
Retrofit
Retrofit
Infinum Android Talks #16 - Retrofit 2 by Kristijan Jurkovic
Infinum Android Talks #16 - Retrofit 2 by Kristijan Jurkovic
Retrofit 2 - O que devemos saber
Retrofit 2 - O que devemos saber
Retrofit
Retrofit
Developer Relations 101
Developer Relations 101
Assistive Context-Aware Toolkit (Portuguese)
Assistive Context-Aware Toolkit (Portuguese)
大鱼架构演进
大鱼架构演进
Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss
Seismic retrofit methods
Seismic retrofit methods
Staying Afloat with Buoy: A High-Performance HTTP Client
Staying Afloat with Buoy: A High-Performance HTTP Client
Desenvolvendo interfaces ricas em java fx para ultrabook final
Desenvolvendo interfaces ricas em java fx para ultrabook final
Ähnlich wie Simplificando chamadas HTTP com o Retrofit
abu.rpc intro
abu.rpc intro
勇浩 赖
Client server part 12
Client server part 12
fadlihulopi
jSession #4 - Maciej Puchalski - Zaawansowany retrofit
jSession #4 - Maciej Puchalski - Zaawansowany retrofit
jSession
Appengine Java Night #2 Lt
Appengine Java Night #2 Lt
Shinichi Ogawa
Appengine Java Night #2 LT
Appengine Java Night #2 LT
Shinichi Ogawa
Android dev 3
Android dev 3
Aravindharamanan S
An Introduction To REST API
An Introduction To REST API
Aniruddh Bhilvare
Asynchronen Code testen
Asynchronen Code testen
ndrssmn
WP HTTP API
WP HTTP API
Eunus Hosen
Consuming RESTful Web services in PHP
Consuming RESTful Web services in PHP
Zoran Jeremic
Consuming RESTful services in PHP
Consuming RESTful services in PHP
Zoran Jeremic
GettingStartedWithPHP
GettingStartedWithPHP
Nat Weerawan
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
Codemotion
The new features of PHP 7
The new features of PHP 7
Zend by Rogue Wave Software
Python tools for testing web services over HTTP
Python tools for testing web services over HTTP
Mykhailo Kolesnyk
Everybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with Erlang
Rusty Klophaus
WP Rest API
WP Rest API
Vladislav Musílek
Reachability in Mobile App Development
Reachability in Mobile App Development
Marc Weil
The Functional Web
The Functional Web
Ryan Riley
So you think you know REST - DPC11
So you think you know REST - DPC11
Evert Pot
Ähnlich wie Simplificando chamadas HTTP com o Retrofit
(20)
abu.rpc intro
abu.rpc intro
Client server part 12
Client server part 12
jSession #4 - Maciej Puchalski - Zaawansowany retrofit
jSession #4 - Maciej Puchalski - Zaawansowany retrofit
Appengine Java Night #2 Lt
Appengine Java Night #2 Lt
Appengine Java Night #2 LT
Appengine Java Night #2 LT
Android dev 3
Android dev 3
An Introduction To REST API
An Introduction To REST API
Asynchronen Code testen
Asynchronen Code testen
WP HTTP API
WP HTTP API
Consuming RESTful Web services in PHP
Consuming RESTful Web services in PHP
Consuming RESTful services in PHP
Consuming RESTful services in PHP
GettingStartedWithPHP
GettingStartedWithPHP
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
The new features of PHP 7
The new features of PHP 7
Python tools for testing web services over HTTP
Python tools for testing web services over HTTP
Everybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with Erlang
WP Rest API
WP Rest API
Reachability in Mobile App Development
Reachability in Mobile App Development
The Functional Web
The Functional Web
So you think you know REST - DPC11
So you think you know REST - DPC11
Mehr von Felipe Pedroso
Improved Knowledge from Data: Building an Immersive Data Analysis Platform
Improved Knowledge from Data: Building an Immersive Data Analysis Platform
Felipe Pedroso
Aprendendo Kotlin na Prática
Aprendendo Kotlin na Prática
Felipe Pedroso
Machine Learning em Apps Android com ML Kit
Machine Learning em Apps Android com ML Kit
Felipe Pedroso
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Felipe Pedroso
Construindo Chatbots em Node.js
Construindo Chatbots em Node.js
Felipe Pedroso
Testes A/B
Testes A/B
Felipe Pedroso
Microsoft Bot Framework
Microsoft Bot Framework
Felipe Pedroso
Análise SWOT
Análise SWOT
Felipe Pedroso
Assistive Context-Aware Toolkit (English)
Assistive Context-Aware Toolkit (English)
Felipe Pedroso
Conectando Coisas com IFTTT
Conectando Coisas com IFTTT
Felipe Pedroso
Minicurso RealSense SDK
Minicurso RealSense SDK
Felipe Pedroso
RealSense SDK
RealSense SDK
Felipe Pedroso
Minicurso "Jogos Multiplataforma com Javascript"
Minicurso "Jogos Multiplataforma com Javascript"
Felipe Pedroso
RealSense SDK
RealSense SDK
Felipe Pedroso
Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8
Felipe Pedroso
Palestra "Game Engines para Javascript"
Palestra "Game Engines para Javascript"
Felipe Pedroso
Fat binaries
Fat binaries
Felipe Pedroso
ADB: Um ator invisível
ADB: Um ator invisível
Felipe Pedroso
Palestra Intel Perceptual Computing SDK (Java)
Palestra Intel Perceptual Computing SDK (Java)
Felipe Pedroso
Developing Rich Interfaces in JavaFX for Ultrabooks
Developing Rich Interfaces in JavaFX for Ultrabooks
Felipe Pedroso
Mehr von Felipe Pedroso
(20)
Improved Knowledge from Data: Building an Immersive Data Analysis Platform
Improved Knowledge from Data: Building an Immersive Data Analysis Platform
Aprendendo Kotlin na Prática
Aprendendo Kotlin na Prática
Machine Learning em Apps Android com ML Kit
Machine Learning em Apps Android com ML Kit
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Construindo Chatbots em Node.js
Construindo Chatbots em Node.js
Testes A/B
Testes A/B
Microsoft Bot Framework
Microsoft Bot Framework
Análise SWOT
Análise SWOT
Assistive Context-Aware Toolkit (English)
Assistive Context-Aware Toolkit (English)
Conectando Coisas com IFTTT
Conectando Coisas com IFTTT
Minicurso RealSense SDK
Minicurso RealSense SDK
RealSense SDK
RealSense SDK
Minicurso "Jogos Multiplataforma com Javascript"
Minicurso "Jogos Multiplataforma com Javascript"
RealSense SDK
RealSense SDK
Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8
Palestra "Game Engines para Javascript"
Palestra "Game Engines para Javascript"
Fat binaries
Fat binaries
ADB: Um ator invisível
ADB: Um ator invisível
Palestra Intel Perceptual Computing SDK (Java)
Palestra Intel Perceptual Computing SDK (Java)
Developing Rich Interfaces in JavaFX for Ultrabooks
Developing Rich Interfaces in JavaFX for Ultrabooks
Kürzlich hochgeladen
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
Scott Keck-Warren
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Delhi Call girls
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
shyamraj55
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
RTylerCroy
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Drew Madelung
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
Radu Cotescu
Slack Application Development 101 Slides
Slack Application Development 101 Slides
praypatel2
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
Delhi Call girls
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
Michael W. Hawkins
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Enterprise Knowledge
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
OnBoard
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
soniya singh
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
Sinan KOZAK
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
Principled Technologies
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
Safe Software
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
Anna Loughnan Colquhoun
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
HampshireHUG
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
Delhi Call girls
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
Kürzlich hochgeladen
(20)
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
Slack Application Development 101 Slides
Slack Application Development 101 Slides
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Simplificando chamadas HTTP com o Retrofit
1.
Simplificando chamadas HTTP com
o Retrofit Felipe Pedroso felipepedroso felipeapedroso
2.
Cenário – Rest
APIs API
3.
HTTP Request • Código
extenso • Tratamento de erros? • Aonde estão os filmes? (domínio do problema) • JSON de Resposta em um String (falta o parse) HttpURLConnection urlConnection = null; URL url = null; try { url = new URL("http://api.themoviedb.org/3/movie/upcoming?api_key=<KEY>"); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuffer buffer = new StringBuffer(); String line; while ((line = reader.readLine()) != null) { buffer.append(line + "n"); } String jsonAnswer = buffer.toString(); } catch (IOException e) { e.printStackTrace(); } finally { urlConnection.disconnect(); }
4.
Resposta
5.
Resposta (+ bonita)
6.
7.
Retrofit • Biblioteca que
transforma a API HTTP em uma interface Java • Criada pela Square Inc. • Disponível no Github • Funciona no Android e Java SE (Gradle, Maven e JAR)
8.
Mas o que
ele oferece?
9.
Interface Service • Suporta
@GET, @POST e @PUT • Vários tipos de parâmetros: @Query, @Path, @Header, etc public interface MoviesService { @GET("movie/upcoming") Call<MovieResults> listUpcomingMovies(); @GET("movie/{movieId}/similar") Call<MovieResults> listSimilarMovies(@Path("movieId") Integer movieId); }
10.
Objeto ‘Service’ Retrofit retrofit
= new Retrofit.Builder() .baseUrl("http://api.themoviedb.org/3/") .addConverterFactory(GsonConverterFactory.create()) .build(); MoviesService moviesService = retrofit.create(MoviesService.class);
11.
{ "poster_path":"/lFSSLTlFozwpaGlO31OoUeirBgQ.jpg", "adult":false, "overview":"Jason Bourne, now
remembering who he tru ly is, tries to uncover hidden truths about his past.", "release_date":"2016-07-28", "genre_ids":[ 28 ], "id":324668, "original_title":"Jason Bourne", "original_language":"en", "title":"Jason Bourne", "backdrop_path":"/AoT2YrJUJlg5vKE3iMOLvHlTd3m.jp g", "popularity":6.463538, "vote_count":52, "video":false, "vote_average":3.97 } Resposta POJO* public class MovieInfo { private Integer id; private String poster_path; private String title; public Double vote_average; public String release_date; public String overview; .... } * POJO: “Plain Old Java Object”
12.
Chamada Síncrona Response<MovieResults> response
= null; try { response = moviesService.listUpcomingMovies().execute(); MovieResults movieResults = response.body(); } catch (IOException e) { e.printStackTrace(); }
13.
Chamada Assíncrona 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 } });
14.
Outras características • Código
mais simples • Tratamento de erros mais fácil • Cliente HTTP plugável (Ex.: OkHttp, ApacheHttp, etc) • Converters (Serialização) plugáveis (Ex.: Gson, XML, etc) • Compatível com RxJava (programação reativa)
15.
Exemplo • JavaFX github.com/felipepedroso/Upco mingMoviesFX • Console github.com/felipepedroso/Upco mingMoviesConsole •
Disponível em: github.com/felipepedroso/Retro fitMoviesExample
16.
Referências • Retrofit –
Site Oficial • Retrofit – Github • Realm 2 – Jake Wharton • Android Libs – Retrofit – Daniel Gimenes • Ícones: https://www.iconfinder.com/AlfredoCreates
17.
Dúvidas?
18.
Obrigado! felipepedroso felipeapedroso
Jetzt herunterladen