Acessando banco de dados remoto com Android
11. agosto 2014 luizfduartejr Android, BD, Java, Mobile (0)
Share
Este tutoria...
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
tools:context=".LocationActivity">
<textview android:layout_width="wrap_c...
</relativelayout>
O layout pretendido é esse:
Com o layout criado, é hora de começar a programar nossa Activity, fazendo o...
?
Agora a classe ClienteGeoIP e seu único método que consome a API:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2...
?
1
2
3
4
5
6
7
8
9
10
11
public void carregarLocalizacao(View view){
try {
Localizacao localizacao =
ClienteGeoIP.retorna...
Acessando banco de dados remoto com android
Próximos SlideShares
Carregando em…5
×

Acessando banco de dados remoto com android

166 visualizações

Publicada em

Perfeito android !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
166
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
4
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Acessando banco de dados remoto com android

  1. 1. Acessando banco de dados remoto com Android 11. agosto 2014 luizfduartejr Android, BD, Java, Mobile (0) Share 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 e este tipo de conexão deve ser realizado através de uma API. AAPI 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. 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. O APP O primeiro passo é abrir nossa ferramenta, o Android Studio. 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, usandos 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): ? 1 2 3 4 5 6 7 <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:paddingbottom="@dimen/activity_vertical_margin"
  2. 2. 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 tools:context=".LocationActivity"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="? android:attr/textAppearanceLarge" android:text="IP:" android:id="@+id/lblIP" android:layout_alignparenttop="true" android:layout_alignparentleft="true" android:layout_alignparentstart="true"> </textview> <edittext android:layout_width="200dp" android:layout_height="wrap_content" android:text="177.155.44.231" android:inputtype="number" android:ems="10" android:id="@+id/txtIP" android:layout_alignparenttop="true" android:layout_torightof="@+id/lblIP"> </edittext> <button android:layout_width="100dp" android:layout_height="wrap_content" android:text="Carregar" android:id="@+id/btnCarregar" android:onclick="carregarLocalizacao" android:layout_alignparenttop="true" android:layout_torightof="@+id/txtIP"> </button> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="? android:attr/textAppearanceLarge" android:text="Geolocalização" android:textstyle="bold" android:id="@+id/lblTitulo" android:layout_below="@+id/lblIP" android:layout_alignparentleft="true" android:layout_margintop="30dp"> </textview> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="? android:attr/textAppearanceLarge" android:text="País: Brazil" android:id="@+id/lblCountry" android:layout_below="@+id/lblTitulo" android:layout_margintop="10dp" android:layout_alignparentleft="true" android:layout_alignparentstart="true"> </textview> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="? android:attr/textAppearanceLarge" android:text="Estado: Rio Grande do Sul" android:id="@+id/lblRegion" android:layout_below="@+id/lblCountry" android:layout_margintop="10dp" android:layout_alignparentleft="true" android:layout_alignparentstart="true"> </textview> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="? android:attr/textAppearanceLarge" android:text="Cidade: Gravataí" android:id="@+id/lblCity" android:layout_below="@+id/lblRegion" android:layout_margintop="10dp" android:layout_alignparentleft="true" android:layout_alignparentstart="true"> </textview>
  3. 3. </relativelayout> O layout pretendido é esse: 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. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 EditText txtIP; TextView lblCountry, lblRegion, lblCity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); //permite conexão com a Internet na Thread principal StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); //carrega os controles da interface para objetos txtIP = (EditText)findViewById(R.id.txtIP); lblCountry = (TextView)findViewById(R.id.lblCountry); lblRegion = (TextView)findViewById(R.id.lblRegion); lblCity = (TextView)findViewById(R.id.lblCity); } 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:
  4. 4. ? Agora a classe ClienteGeoIP e seu único método que consome a API: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import org.apache.http.client.*; import org.apache.http.client.methods.*; import org.apache.http.impl.client.*; import org.json.*; import java.io.IOException; public class ClienteGeoIP { public static Localizacao retornarLocalizacaoPorIp(String ip) throws IOException, JSONException { HttpClient client = new DefaultHttpClient(); HttpGet getMethod=new HttpGet("http://freegeoip.net/json/" + ip); ResponseHandler<string> responseHandler = new BasicResponseHandler(); String responseBody = client.execute(getMethod, responseHandler); JSONObject obj = new JSONObject(responseBody); String pais = obj.get("country_name").toString(); String estado = obj.get("region_name").toString(); String cidade = obj.get("city").toString(); return new Localizacao(pais, estado, cidade); } } </string> 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:
  5. 5. ? 1 2 3 4 5 6 7 8 9 10 11 public void carregarLocalizacao(View view){ try { Localizacao localizacao = ClienteGeoIP.retornarLocalizacaoPorIp(txtIP.getText().toString()); lblRegion.setText("Estado: " + localizacao.getRegion()); lblCity.setText("Cidade: " + localizacao.getCity()); lblCountry.setText("País: " + localizacao.getCountry()); } catch(Exception ex){ Toast.makeText(getBaseContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); } } Não esqueçamos que uma vez que vamos conectar à Internet precisamos informar essa permissão no AndroidManifest.xml, conforme mostrado abaixo. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!--?xml version="1.0" encoding="utf-8"?--> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.luiztools.geolocalizacao"> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".LocationActivity" android:label="@string/title_activity_location"> <intent-filter> <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"></category> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET"> </uses-permission></manifest> Testando nosso app em um AVD conseguimos ver que ele funciona perfeitamente e com isso encerramos mais este breve tutorial. Um abraço.

×