Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
Capítulo 10: Sincronização de dados
Instrutor
●

Programador desde 2000

●

Aluno de doutorado

●

●

●

●

Mestre em informática pelo
ICOMP/UFAM
Especialista...
Agenda
●

Na estrada, até aqui

●

Gerando JSON

●

Classe para conversão da lista de alunos em JSON

●

Classe para comun...
Pensando além...
●

●

●

●

Agora que nossa App toca parte da música de abertura do
Supernatural, ao receber um SMS de um...
Integração baseada em JSON
●

●

●

●

JSON é uma estrutura leve e fácil de trabalhar, muito
aderente ao ambiente mobile
P...
Vamos conhecer componentes JSON
●

O JSON é nativo do Android, que já traz as classe
necessárias à sua implementação:

●

...
Passo a passo
●

●

●

Vamos criar uma classe especialista em converter uma
Coleção de Alunos em um arquivo JSON
A essa cl...
Exercício 01: AlunoConverter

M.Sc. Márcio Palheta

8/55
Exercício 01: AlunoConverter

Novo pacote

M.Sc. Márcio Palheta

9/55
Exercício 01: AlunoConverter

Novo pacote

Nova classe
para conversão
de Alunos em
Arquivo JSON

M.Sc. Márcio Palheta

10/...
Exercício 01: AlunoConverter
Converte Alunos
em dados JSON

M.Sc. Márcio Palheta

11/55
Exercício 01: AlunoConverter
Criação de objeto
de escrita e
estrutura inicial

Converte Alunos
em dados JSON

M.Sc. Márcio...
Exercício 01: AlunoConverter
Conversão de
Tipos de dados

M.Sc. Márcio Palheta

13/55
Exercício 01: AlunoConverter
Conversão de
Tipos de dados

Fechamento da
Estrutura e retorno
do código gerado

M.Sc. Márcio...
String gerada
{
"list": [
{
"aluno": [
{
"id": 1,
"nome": "Maria de Oliveiras",
"telefone": "092 3224567",
"endereco": "Ru...
Comunicação com servidor remoto
●

●

●

●

●

Vamos criar uma classe especialista em comunicação
com servidores WEB
Para ...
Prévia do código
//Objeto para comunicacao com servidor remoto
DefaultHttpClient httpClient = new DefaultHttpClient();
//O...
Exercício 02: classe WebClient

M.Sc. Márcio Palheta

18/55
Exercício 02: classe WebClient
Novo pacote

M.Sc. Márcio Palheta

19/55
Exercício 02: classe WebClient
Novo pacote
Nova classe para
envio dos dados

M.Sc. Márcio Palheta

20/55
Exercício 02: classe WebClient
Definições da URL
para comunicação

M.Sc. Márcio Palheta

21/55
Exercício 02: classe WebClient
Definições da URL
para comunicação

Método para envio
de dados JSON

M.Sc. Márcio Palheta

...
Exercício 02: classe WebClient
Objetos para
comunicação

M.Sc. Márcio Palheta

23/55
Exercício 02: classe WebClient
Objetos para
comunicação

Formatação e
envio dos dados

M.Sc. Márcio Palheta

24/55
Exercício 02: classe WebClient
Objetos para
comunicação

Formatação e
envio dos dados

Processamento
Da resposta do
Servid...
Exercício 02: classe WebClient
Objetos para
comunicação

Formatação e
envio dos dados

Retorna o IP solicitante:
{"ip": "1...
Exercício 03: ListaAlunosActivity.java

M.Sc. Márcio Palheta

27/55
Exercício 03: ListaAlunosActivity.java

M.Sc. Márcio Palheta

28/55
Exercício 03: ListaAlunosActivity.java

M.Sc. Márcio Palheta

29/55
Exercício 03: ListaAlunosActivity.java

M.Sc. Márcio Palheta

30/55
Exercício 03: ListaAlunosActivity.java

M.Sc. Márcio Palheta

31/55
Exercício 03: ListaAlunosActivity.java

M.Sc. Márcio Palheta

32/55
Executando a App
●

●

●

Quando tentamos rodar a nossa App:

A operação de comunição com um servidor remoto é
imprevisíve...
Envio assíncrono de dados
●

●

●

●

●

Vimos que não podemos executar tarefas “possivelmente”
demoradas na thread princi...
Exercício 04: EnviaAlunosTask.java

M.Sc. Márcio Palheta

35/55
Exercício 04: EnviaAlunosTask.java
Novo pacote

M.Sc. Márcio Palheta

36/55
Exercício 04: EnviaAlunosTask.java
Novo pacote
Classe filha de
AsyncTask

M.Sc. Márcio Palheta

37/55
Exercício 04: EnviaAlunosTask.java
Novo pacote
Classe filha de
AsyncTask

Tipo de retorno

M.Sc. Márcio Palheta

38/55
Exercício 04: EnviaAlunosTask.java
Novo pacote
Classe filha de
AsyncTask

Tipo de retorno

M.Sc. Márcio Palheta

39/55
Exercício 04: EnviaAlunosTask.java
Novo pacote
Classe filha de
AsyncTask

Tipo de retorno

M.Sc. Márcio Palheta

40/55
Exercício 04: EnviaAlunosTask.java
Novo pacote
Classe filha de
AsyncTask

Tipo de retorno

M.Sc. Márcio Palheta

41/55
Exercício 04: EnviaAlunosTask.java
Novo pacote
Classe filha de
AsyncTask

Tipo de retorno

M.Sc. Márcio Palheta

42/55
Exercício 04: Continuação...

M.Sc. Márcio Palheta

43/55
Executado ANTES
da sincronização

Exercício 04: Continuação...

M.Sc. Márcio Palheta

44/55
Executado ANTES
da sincronização

Exercício 04: Continuação...

Método que executa
a sincronização

M.Sc. Márcio Palheta

...
Executado ANTES
da sincronização

Exercício 04: Continuação...

Método que executa
a sincronização

Executado DEPOIS
da si...
Exercício 05: ListaAlunosActivity

M.Sc. Márcio Palheta

47/55
Exercício 05: ListaAlunosActivity

M.Sc. Márcio Palheta

48/55
Execute novamente a App

M.Sc. Márcio Palheta

49/55
Execute novamente a App

M.Sc. Márcio Palheta

50/55
Execute novamente a App

M.Sc. Márcio Palheta

51/55
Execute novamente a App

M.Sc. Márcio Palheta

52/55
O que vem a seguir?
●

Fragments

●

Google Maps

●

GPS

M.Sc. Márcio Palheta

53/55
Referências
●

www.caelum.com.br

●

d.android.com

●

●

LECHETA, Ricardo. Google Android, 3a edição,
Novatec, São Paulo,...
Capítulo 10: Sincronização de dados
Próxima SlideShare
Cargando en…5
×

Capítulo 10 - Sincronização de dados usando JSON

9.066 visualizaciones

Publicado el

Neste capítulo discutimos o processo de sincronização de dados de uma App Android com uma App WEB, usando JSON e Tarefas Assíncronas

Publicado en: Educación

Capítulo 10 - Sincronização de dados usando JSON

  1. 1. Capítulo 10: Sincronização de dados
  2. 2. Instrutor ● Programador desde 2000 ● Aluno de doutorado ● ● ● ● Mestre em informática pelo ICOMP/UFAM Especialista em aplicações WEB – FUCAPI marcio.palheta@gmail.com sites.google.com/site/marcio palheta M.Sc. Márcio Palheta
  3. 3. Agenda ● Na estrada, até aqui ● Gerando JSON ● Classe para conversão da lista de alunos em JSON ● Classe para comunicação com servidor WEB remoto ● Envio da lista de alunos para um servidor remoto ● Tarefas assíncronas M.Sc. Márcio Palheta 3/55
  4. 4. Pensando além... ● ● ● ● Agora que nossa App toca parte da música de abertura do Supernatural, ao receber um SMS de um aluno, queremos avançar um pouco Vamos sincronizar os dados da App com um servidor de web remoto Não vamos discutir o serviço web, mas você pode baixar o código de exemplo no repositório do curso: https://github.com/marciopalheta/cursosandroid M.Sc. Márcio Palheta 4/55
  5. 5. Integração baseada em JSON ● ● ● ● JSON é uma estrutura leve e fácil de trabalhar, muito aderente ao ambiente mobile Podemos representar facilmente os dados de um Objeto Java em um arquivo de formato amigável A leitura e escrita de dados via JSON já é nativa da maioria das linguagens de programação comerciais Apesar de parecido com XML, o JSON ganhou espaço por ser de fácil utilização com JavaScript M.Sc. Márcio Palheta 5/55
  6. 6. Vamos conhecer componentes JSON ● O JSON é nativo do Android, que já traz as classe necessárias à sua implementação: ● JSONObject: Coleção de pares do tipo Chave/Valor ● JSONArray: Sequencia ordenada de valores ● ● JSONStringer: Objeto usado para criação de arquivos com dados no formato JSON JSONException: Exceção lançada quando falha na estrutura de dados do JSON for detectada M.Sc. Márcio Palheta 6/55
  7. 7. Passo a passo ● ● ● Vamos criar uma classe especialista em converter uma Coleção de Alunos em um arquivo JSON A essa classe, chamaremos AlunoConverter Nosso Converter deve oferecer o método toJSON(), que recebe uma lista da alunos como parâmetro: public String toJSON(List<Aluno> lista) { … } M.Sc. Márcio Palheta 7/55
  8. 8. Exercício 01: AlunoConverter M.Sc. Márcio Palheta 8/55
  9. 9. Exercício 01: AlunoConverter Novo pacote M.Sc. Márcio Palheta 9/55
  10. 10. Exercício 01: AlunoConverter Novo pacote Nova classe para conversão de Alunos em Arquivo JSON M.Sc. Márcio Palheta 10/55
  11. 11. Exercício 01: AlunoConverter Converte Alunos em dados JSON M.Sc. Márcio Palheta 11/55
  12. 12. Exercício 01: AlunoConverter Criação de objeto de escrita e estrutura inicial Converte Alunos em dados JSON M.Sc. Márcio Palheta 12/55
  13. 13. Exercício 01: AlunoConverter Conversão de Tipos de dados M.Sc. Márcio Palheta 13/55
  14. 14. Exercício 01: AlunoConverter Conversão de Tipos de dados Fechamento da Estrutura e retorno do código gerado M.Sc. Márcio Palheta 14/55
  15. 15. String gerada { "list": [ { "aluno": [ { "id": 1, "nome": "Maria de Oliveiras", "telefone": "092 3224567", "endereco": "Rua vai e volta", "site": "http://www.google.com", "email": "maria@gmail.com", "nota": 4 }, { "id": 2, "nome": "Joana Silva", "telefone": "21456627", "endereco": "Rua A, 25, CD", "site": "www.joana.com", "email": "joana@gmail.com", "nota": 8 } ] } ] } ● O método toJSON() da classe AlunoConverter gerar uma string parecida com essa aí ao lado ● Temos uma array list ● E outro array aluno ● ● Você pode validar Strings JSON no site: http://jsonlint.com/ M.Sc. Márcio Palheta 15/55
  16. 16. Comunicação com servidor remoto ● ● ● ● ● Vamos criar uma classe especialista em comunicação com servidores WEB Para isso, precisamos de um objeto DefaultHttpClient Para envio dos dados, podemos escolher entre GET ou POST Vamos usar o POST, porque o arquivo a ser enviado pode ser muito grande e o GET tem limitações de número de parâmetros suportados Precisamos de um HttpPost M.Sc. Márcio Palheta 16/55
  17. 17. Prévia do código //Objeto para comunicacao com servidor remoto DefaultHttpClient httpClient = new DefaultHttpClient(); //Objeto para encapsular a String gerada com JSON HttpPost post = new HttpPost(url); try { post.setEntity(new StringEntity(json)); //Informa que o conteudo da requisicao eh JSON e //Solicita que a resposta tambem seja em JSON post.setHeader("Content-type", "application/json"); post.setHeader("Accept", "application/json"); //Execucao da requisicao HttpResponse response = httpClient.execute(post); //Verificacao da reposta String jsonResposta = EntityUtils.toString(response.getEntity()); return jsonResposta; } } catch (Exception e) { throw new RuntimeException(e); M.Sc. Márcio Palheta 17/55
  18. 18. Exercício 02: classe WebClient M.Sc. Márcio Palheta 18/55
  19. 19. Exercício 02: classe WebClient Novo pacote M.Sc. Márcio Palheta 19/55
  20. 20. Exercício 02: classe WebClient Novo pacote Nova classe para envio dos dados M.Sc. Márcio Palheta 20/55
  21. 21. Exercício 02: classe WebClient Definições da URL para comunicação M.Sc. Márcio Palheta 21/55
  22. 22. Exercício 02: classe WebClient Definições da URL para comunicação Método para envio de dados JSON M.Sc. Márcio Palheta 22/55
  23. 23. Exercício 02: classe WebClient Objetos para comunicação M.Sc. Márcio Palheta 23/55
  24. 24. Exercício 02: classe WebClient Objetos para comunicação Formatação e envio dos dados M.Sc. Márcio Palheta 24/55
  25. 25. Exercício 02: classe WebClient Objetos para comunicação Formatação e envio dos dados Processamento Da resposta do Servidor WEB M.Sc. Márcio Palheta 25/55
  26. 26. Exercício 02: classe WebClient Objetos para comunicação Formatação e envio dos dados Retorna o IP solicitante: {"ip": "189.48.181.194"} Processamento Da resposta do Servidor WEB M.Sc. Márcio Palheta 26/55
  27. 27. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 27/55
  28. 28. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 28/55
  29. 29. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 29/55
  30. 30. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 30/55
  31. 31. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 31/55
  32. 32. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 32/55
  33. 33. Executando a App ● ● ● Quando tentamos rodar a nossa App: A operação de comunição com um servidor remoto é imprevisível, podendo demorar, travando a UIThread A tarefa de sincronização deve rodar em outra thread M.Sc. Márcio Palheta 33/55
  34. 34. Envio assíncrono de dados ● ● ● ● ● Vimos que não podemos executar tarefas “possivelmente” demoradas na thread principal UIThread Precisamos utilizar uma tarefa assíncrona, independente Para isso usamos a AsyncTask, onde podemos isolar o processo de comunicação com o servidor remoto Durante o processo, vamos exibir uma barra de progresso Ao final, vamos exibir a resposta enviada pelo servidor web M.Sc. Márcio Palheta 34/55
  35. 35. Exercício 04: EnviaAlunosTask.java M.Sc. Márcio Palheta 35/55
  36. 36. Exercício 04: EnviaAlunosTask.java Novo pacote M.Sc. Márcio Palheta 36/55
  37. 37. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask M.Sc. Márcio Palheta 37/55
  38. 38. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 38/55
  39. 39. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 39/55
  40. 40. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 40/55
  41. 41. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 41/55
  42. 42. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 42/55
  43. 43. Exercício 04: Continuação... M.Sc. Márcio Palheta 43/55
  44. 44. Executado ANTES da sincronização Exercício 04: Continuação... M.Sc. Márcio Palheta 44/55
  45. 45. Executado ANTES da sincronização Exercício 04: Continuação... Método que executa a sincronização M.Sc. Márcio Palheta 45/55
  46. 46. Executado ANTES da sincronização Exercício 04: Continuação... Método que executa a sincronização Executado DEPOIS da sincronização M.Sc. Márcio Palheta 46/55
  47. 47. Exercício 05: ListaAlunosActivity M.Sc. Márcio Palheta 47/55
  48. 48. Exercício 05: ListaAlunosActivity M.Sc. Márcio Palheta 48/55
  49. 49. Execute novamente a App M.Sc. Márcio Palheta 49/55
  50. 50. Execute novamente a App M.Sc. Márcio Palheta 50/55
  51. 51. Execute novamente a App M.Sc. Márcio Palheta 51/55
  52. 52. Execute novamente a App M.Sc. Márcio Palheta 52/55
  53. 53. O que vem a seguir? ● Fragments ● Google Maps ● GPS M.Sc. Márcio Palheta 53/55
  54. 54. Referências ● www.caelum.com.br ● d.android.com ● ● LECHETA, Ricardo. Google Android, 3a edição, Novatec, São Paulo, 2013 Código fonte completo: https://github.com/marciopalheta/cursosandroid M.Sc. Márcio Palheta 54/55
  55. 55. Capítulo 10: Sincronização de dados

×