Arquivos de fevereiro, 2015

Acessando a rede através de HTTP

1423687551_Globe

Neste capítulo do curso de Android iremos aprender como acessar um servidor utilizando HTTP.

Iremos utilizar este servidor para fazer backup das notas criadas pela nossa aplicação QuickNotes.

Se você não estava acompanhando o Curso de Android, faça o download do projeto aqui, pois as alterações serão feitas neste projeto.

 

Clientes HTTP em Android

Em Android temos dois clientes HTTP:

  • Apache HTTP Client
  • HttpURLConnection

O Google aconselha o uso de HttpURLConnection desde a versão 2.3 (Gingerbread)

Usaremos o HTTPUrlConnection para enviar as notas, que no nosso exemplo são armazenadas no banco de dados local, para o servidor remoto. Abaixo segue a implementação:


String urlParameters = "nota=" + URLEncoder.encode(note,"UTF-8");
String request = "http://tests.felipesilveira.com.br/android-core/insert.php";
URL url = new URL(request);

// Criando a instância de HttpURLConnection responsável por acessar a rede
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
// Vamos enviar a requisição via POST
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" +
		Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches (false);

// Criando um 

Threads separadas em Android

Quem de nós nunca se deparou com o seguinte diálogo ao executar uma aplicação Android?

ANR - application not responding

Mas o que causa esse problema?

Este é um diálogo mostrado pelo sistema quando ao identificar que a aplicação está executando muitas operações na main thread – a thread principal ou UI thread.

A UI thread é responsável pelas interações com o usuário.  Por isso, quando o sistema percebe que ela está fazendo muito processamento, ele considera que a aplicação não está respondendo ao usuário e, portanto, está travada. Neste momento ele dá a opção de fechar a aplicação – o inconveniente diálogo application not responding – ou simplesmente ANR.

Como evitar um ANR

Mas como evitar um ANR? Simples! Basta executar as operações demoradas (como acesso a rede, acesso a banco de dados, entre outros) de sua aplicação em uma thread separada. E para fazer isso existem três mecanismos:

  • Threads (Java nativo)
  • Asynctasks
  • Handlers

O primeiro mecanismo (threads nativas de java) funciona, …