Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Android a Partir do Zero: Fazendo Uso de APIs REST

Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Android From Scratch.
Android From Scratch: Hardware Sensors

Portuguese (Português) translation by Gabriel Guerreiro (you can also view the original English article)

A maioria de nós desenvolveu um apetite voraz por informações novas, que com a Internet, se tornou uma parte importante de nossas vidas. Nossa capacidade de manter a atenção está menor do que nunca, por isso, desenvolver aplicativos Android com conteúdo estático pode ser uma ideia ruim. Você deveria considerar fazer aplicativos que podem mostrar conteúdo novo todas as vezer que é aberto.

Isso pode soar difícil, mas com mais e mais sites expondo seus recursos através de APIs REST, é na verdade bem fácil. (Veja nosso Guia do Iniciante para HTTP e REST)

Nesse tutorial, eu vou mostrar como usar as classes e métodos disponíveis no SDK do Android para conectar a servidores remotos e interagir com eles usando suas APIs REST.

1. Habilitando o Acesso à Internet

Usar APIs REST obviamente requer acesso à Internet. No entanto, aplicativos Android só podem acessar a Internet se possuírem a permissão android.permission.INTERNET. Logo, antes de começar a escrever qualquer códido de acesso à rede, você deve certificar-se que a seguinte tag user-permission está presente no arquivo de manifesto do seu projeto.

Por essa não ser considerada uma permissão perigosa, você não precisa requisitá-la em tempo de execução nos dispositivos de API nível 23 ou maior.

2. Criando Linhas de Execução Secundárias

A plataforma Android não permite que você faça operações de rede na linha de execução principal da aplicação. Por isso, todo o código que opera sobre a rede deve estar em uma linha de execução secundária. A maneira mais fácil de criar tal linha de execução é usar o método execute() da classe AsyncTask. Como seu único argumento, execute() espera um objeto Runnable.

Se você quer aprender mais sobre como executar operações em linhas de execução secundárias, eu sugiro que você leia esse tutorial sobre operações em segundo plano da série Android a Partir do Zero.

3. Criando uma Conexão HTTP

Usando o método openConnection() da classe URL, você pode rapidamente criar uma conexão com qualquer serviço REST. O valor de retorno de openConnection() deve ser coagido a uma instância de HttpURLConnection ou HttpsURLConnection, dependendo do tipo da conexão. Tanto HttpUrlConnection quanto HttpsURLConnection permitem que você execute operações como adicionar cabeçalhos de requisição e ler as respostas.

O código a seguir mostra como configurar uma conexão com a API do GitHub:

Perceba que HttpsURLConnection é uma subclasse de HttpURLConnection.

4. Adicionando Cabeçalhos de Requisição

A maioria dos sites que oferecem APIs REST querem que você identifique seu aplicativo unicamente. A maneira mais fácil de ajudá-los é incluir um cabeçalho User-Agent único em todas as suas requisições.

Para adicionar um cabeçalho User-Agent em sua requisição, você deve usar o método setRequestProperty() da classe HttpURLConnection. Por exemplo, para atribuir o valor my-rest-app-v0.1 ao cabeçalho User-Agent:

Você pode adicionar múltiplos cabeçalhos à sua requisição chamando o método setRequestProperty() várias vezes. No exemplo abaixo, adicionamos um cabeçalho Accept e um Contact-Me:

5. Lendo as Respostas

Assim que você passa todos os cabeçalhos de requisição, você pode verificar se você tem uma resposta válida usando o método getResponseCode() de HttpURLConnection.

Se a classe HttpURLConnection recebe uma resposta com um código de redirecionamento, como o 301, ela o gerencia automaticamente. Por isso, normalmente você não precisa escrever qualquer código extra para gerenciar redirecionamentos.

No caso de não haver erros, você pode chamar o método getInputStream() para receber uma referência ao fluxo de entrada de dados da conexão.

A maioria das APIs REST atuais retornam dados formatados como um documento JSON válido. Por isso, ao invés de ler diretamente do objeto InputStream, eu sugiro que você crie um InputStreamReader para ele.

6. Interpretando Respostas JSON

O SDK do Android tem uma classe chamada JsonReader, que permite interpretar documentos JSON muito facilmente. Você pode criar uma nova instância de JsonReader passando o InputStreamReader para seu construtor.

A maneira de extrair uma parte específica das informações do documento JSON depende de sua estrutura. Por exemplo, um documento JSON retornado pela raiz da API REST do GitHub tem esse formato:

Como você pode ver, a resposta é apenas um objeto JSON grande que contém várias chaves. Para extrair o valor da chave organization_url da resposta, você precisa escrever o seguinte código:

O código acima processa a resposta JSON como um fluxo de símbolos. Por isso consome pouquíssima memória. No entanto, por precisar processar cada símbolo, um atrás do outro, pode ser lento ao processar respostas grandes.

Depois de extrair toda a informação requerida, você deve sempre chamar o método close() de JsonReader para que ele libere todos os recursos que carrega.

Você também deve fechar a conexão chamando o método disconnect() de HttpURLConnection.

7. Usando Métodos HTTP Diferentes

Interfaces REST baseadas em HTTP usam métodos HTTP para determinar o tipo da operação que deve ser executada em um recurso. Nas etapas anteriores, nós fizemos uso do método GET do HTTP para executar operações de leitura. Como a classe HttpURLConnection usa o método GET por padrão, nós não precisamos declarar explicitamente.

Para mudar o método HTTP de seu objeto HttpURLConnection, você deve chamar seu método setRequestMethod(). Por exemplo, o código abaixo abre uma conexão com o site httpbin.org e configura o método HTTP POST:

Como você já deve saber, requisições POST são usadas para mandar dados ao servidor. A escrever ao fluxo de saída de dados da conexão, você pode facilmente adicionar qualquer dado ao corpo da requisição POST. Mas antes de fazê-lo, você deve certificar-se de que chamou o método setDoOutput() do objeto HttpURLConnection e passar true.

O seguinte código mostra como mandar um simples par chave-valor para o servidor:

8. Fazendo Cache das Respostas

É sempre uma boa ideia manter um cache das respostas HTTP. Fazendo isso, você pode não só reduzir a largura de nada necessária para seu aplicativo, mas também pode torná-lo mais responsivo. A partir da API nível 13, o SDK do Android oferece uma classe chamada HttpResponseCache, que permite que você implemente cache facilmente sem fazer qualquer modificação à sua lógica de rede.

Para adicionar um cache em seu aplicativo, você deve chamar o método install() de HttpResponseCache. Esse método espera um caminho absoluto especificando onde o cache deve ser armazenado e um número especificando o tamanho do cache em bytes. Você pode usar o método getCacheDir() se você não quer especificar o caminho manualmente.

O código a seguir adiciona um cache cujo tamanho é 100 000 bytes:

Assim que o cache for instalado, a classe HttpURLConnection começa a usá-la automaticamente. Para verificar se seu cache está funcionando, você pode usar o método getHitCount(), que retorna o número de respostas HTTP que foram dadas pelo cache.

Conclusão

Há milhares de APIs REST disponíveis para você usar livremente em seus aplicativos Android. Usando-os, você pode fazer seu aplicativo mais informativo, interessante e rico em recursos. Nesse tutorial, você aprendeu como usar a classe HttpURLConnection para consumir APIs REST. Você também aprendeu como criar um cache de respostas HTTP que mantém o uso de banda do seu aplicativo baixa.

Se você está pensando que usar HttpURLConnection é difícil, você pode dar uma tentada em umas bibliotecas de terceiros como Volley. Bibliotecas como esta usam HttpURLConnection internamente, mas disponibilizam vários métodos convenientes que te permitem manter o código mais conciso e legível.

Para aprender mais sobre como trabalhar com a rede no Android, você pode ver o guia de Operações de Rede do Android.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.