Acessando banco de dados remoto com Android (inclui 6+)

Atualizado em 12/08/17!

Este tutorial estava há tempos para ser escrito e na verdade é muito mais simples do que a maioria dos desenvolvedores pensam. Programadores Java em geral estão acostumados a utilizar o framework JDBC para realizar conexões aos seus bancos de dados favoritos como MySQL e SQL Server, diretamente.

Entretanto, o Android não oferece suporte nativo à conexões remotas em SGBDs (por diversos motivos) e este tipo de conexão deve ser realizado através de uma API.

Esse é um post iniciante. Caso queira um post mais avançado de como consumir APIs externas em Android usando a biblioteca Retrofit, leia este aqui.

Veremos neste post:

  1. A API
  2. O app
  3. Conectando as duas pontas

Vamos lá!

#1 – A API

Como o intuito deste post não é ensinar como criar uma API, que neste exemplo nada mais é do que um webservice, usaremos uma API pronta. Caso tenha interesse em aprender a criar webservices, em meu livro de Android tenho exemplos de como fazê-lo em Java, PHP, .NET e Node.js (aqui no blog tem um tutorial de API em Node.js também).

O site http://freegeoip.net oferece uma API aberta e gratuita para descobrir a geolocalização de um dispositivo com base em seu endereço IP. Ou seja, você informa o IP e a API deles retorna um JSON, CSV ou XML com os dados de localização, quando encontrados.

Você pode testar a API fazendo chamadas a http://freegeoip.net/formato/seu_ip onde ‘formato’ deve ser substituído por json, csv ou xml e ‘seu_ip’ deve ser substituído pelo IP que deseja consultar, ou nada, para consultar a localização do seu IP atual. Neste exemplo usaremos a URL http://freegeoip.net/json/8.8.8.8 que é o IP do servidor de DNS do Google, na Califórnia.

Mas o que isso tem a ver com acesso a bancos de dados remotos, você deve estar se perguntando. O FreeGeoIP nada mais é do que uma base de dados remota onde seus desenvolvedores criaram um webservice REST para consulta de dados a a partir de qualquer plataforma, ou seja, eles permitem através da API que qualquer um possa acessar seu banco de dados, e é exatamente isso que um desenvolvedor Android necessita fazer para integrar de maneira prática e eficiente um banco de dados remoto ao seu app.

Atenção: caso venha a utilizar uma API local (que você desenvolveu) para testes, aponte a URL da api para 10.0.2.2 no seu app, pois se você usar localhost ele vai procurar a API no Android, ao invés do sistema host.

#2 – O App

O primeiro passo é abrir nossa ferramenta, o Android Studio (se você não sabe do que estou falando, dê uma olhada neste post). Outras ferramentas possíveis incluem o ADT Bundle e o NetBeans com suporte à Android. Mande criar um novo projeto do tipo Android Application e lhe dê o nome de LocationApp. A versão de Android fica ao seu gosto, enquanto eu utilizei a versão 4.0 em meus testes, oferecendo compatibilidade com toda a família IceCream Sandwich e posteriores, incluindo o Android Kit Kat (4.4).

Crie uma Blank Activity chamada LocationActivity que herdará da Activity base e que criará ao mesmo tempo o arquivo de layout activity_location.xml na pasta de layouts. Crie seu layout de maneira bem simples, usando widgets padrões do Android SDK como TextViews, EditText e Button, como mostra o trecho de código abaixo (devido a problemas em meu plugin, está tudo em minúsculo):

O layout pretendido é esse:

tela

Com o layout criado, é hora de começar a programar nossa Activity, fazendo o binding de cada widget com variáveis de mesmo tipo, como mostra o trecho de código abaixo que fica no evento onCreate da Activity.

#3 – Conectando as duas pontas

O próximo passo é criar uma classe para consumir a API do FreeGeoIP.net, que chamamos de ClienteGeoIP, além de uma classe para representar o objeto Localizacao do nosso app, que possui as referidas informações que queremos exibir na tela. A classe ClienteGeoIP conecta-se na API usando um cliente HTTP e convertendo o retorno para o formato JSON, usando as bibliotecas nativas do Android.

Primeiro a classe Localizacao.java:

Agora a classe ClienteGeoIP e seu único método que consome a API:

Com o método de retornar localização criado, devemos definir o método do evento OnClick do botão de carregar a  localização da nossa LocationActivity (note que existe uma chamada a um evento carregarLocalizacao no XML do Button). Esse método deve ser declarado na LocationActivity, logo abaixo do evento onCreate:

Não esqueçamos que uma vez que vamos conectar à Internet precisamos informar essa permissão no AndroidManifest.xml, conforme mostrado abaixo.

Testando nosso app em um AVD conseguimos ver que ele funciona perfeitamente e com isso encerramos mais este breve tutorial.

Atenção para versão Android 6+: a partir da versão 6 do Android o modelo de permissões mudou drasticamente. Da Marshmallow em diante o usuário pode conceder permissões para o app consumir recursos específicos, como a Internet, somente no momento em que o app vai usar esse recurso pela primeira vez. Além disso, ele pode mais tarde revogar esta permissão nas configurações do aplicativo.

Com isso em mente, é importante para desenvolvedores que queiram evitar problemas em versões recentes do Android sempre verificarem, no momento em que vão precisar de Internet, se possuem tal permissão. Caso não possuam, devem pedir ao Android que peça ao usuário. O código abaixo ilustra isso.

Que tal juntar esse app com o recurso de mapa que o Android fornece? Dê uma olhada neste tutorial aqui sobre como criar apps com mapa.

Ou então, que tal juntar com o recurso de GPS do smartphone? Nesse caso, dê uma olhada neste tutorial aqui sobre como usar o GPS do celular.

Um abraço.

final

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender a criar outros tantos apps incríveis!

Criando apps para empresas com Android

O que achou desse artigo?
[Total: 5 Média: 3.6]