No encontro do dia 11/03 foi dada continuidade à série de apresentação e discussões sobre acesso à internet. Anteriormente foi introduzido como utilizar o OkHttp e o Retrofit para acessar dados da internet, nesta apresentação vamos utilizar as mesmas libs para trabalhar com JSON, e discutir sobre outras utilizadas para carregar imagens.

O Serviço

Como o conteúdo daqui é para aprendizagem e demostração, foi utilizado um serviço REST aberto, o JSONPlaceholder, que oferece vários tipos de dados para serem utilizados durante a fase de teste de uma aplicação, da lista abaixo, utilizaremos os posts:

Recursos disponibilizados pelo JSONPlaceholder
Recursos disponibilizados pelo JSONPlaceholder

Lendo os posts via OkHttp

Primeiramente, precisaremos definir uma classe modelo em que os posts serão instanciados na aplicação – caso precise do código da classe Post, olhar nas referências ao final do artigo.

Lendo os posts via Retrofit

O Retrofit, como falado na apresentação anterior, é o um cliente HTTP que utiliza o OkHttp como base para consumir serviços REST. Ele acaba facilitando a vida do programador, uma vez que disponibiliza anotações que nos ajuda a mapear nossas requisições, e o seu padrão ajuda a deixar nosso código mais limpo, que vamos fazer da seguinte forma:
Criamos uma interface, passando as requisições que poderão ser feitas, devolvendo uma Call:

Acima temos 3 funções, uma para listar todos os posts, a segunda que pega apenas um post por ID, e a terceira que não foi implementada, mas serve para mostrar que ele facilita uma requisição do tipo POST.

Com isso pronto, vamos criar uma nova activity, com um EditText, um Button e um TextView. A primeira função a ser declarada será a que retorna a instância do Retrofit:

Para este artigo, vamos mostrar apenas o método de exibir um post, há outra implementação no projeto. Para isso, é necessário instanciar a classe RetrofitInterface e a partir dela criar uma Call, e chamar o método enqueue a partir dela. Na Call já é passado a classe de Post, isso indica que não precisaremos converter a resposta para a classe (que foi feito pelo Gson no OkHttp).

Utilizando Glide e Picasso para ler imagens

O método primitivo de ler uma imagem da internet consumia muita memória e demorava muito para exibir o resultado na view, para isso existem o Picasso e o Glide, libs que não apenas facilitam a obtenção de imagens a partir de uma URL, como às organiza em cache, ainda que em métodos diferentes. As diferenças entre o Glide e o Picasso são poucas, e como não quero entrar muito em detalhes, vou deixar um link nas referências para que vocês mesmos analisem qual o melhor para a aplicação. Abaixo é mostrado o quão simples é a implementação:

Existem alguns outros métodos extras que podem ser utilizados, por exemplo, para cortar uma imagem, posicionar ela no centro, exibir animações, retirar o fade que é padrão do Glide, etc. Esses métodos acabam variando em cada biblioteca, está tudo bem explicado em suas respectivas documentações.

O Glide é mais recomendado para aplicações que utilizam muitas imagens externas, uma vez que ele guarda as imagens na resolução que vai ser utilizada pelo aplicativo, e possibilita o uso de thumbnails, que são versões menores de uma imagem, reduzindo o tempo de carregamento/exibição das imagens.

Slides da Apresentação

Referências

Github do Projeto – https://github.com/Club-do-Android/AcessoAInternet-ImgJson
OkHttp – http://square.github.io/okhttp/
Retrofit – http://square.github.io/retrofit/
Comparativo Glide vs. Picasso, por Multidots (em inglês) – https://medium.com/@multidots/glide-vs-picasso-930eed42b81d#.8o9e0chwd
Picasso – http://square.github.io/picasso/
Glide – https://github.com/bumptech/glide
Documentação do Glide – https://github.com/bumptech/glide/wiki

Fotos do Encontro