Capítulo 10 - Sincronização de dados usando JSON
-
Upload
marcio-palheta -
Category
Education
-
view
3.073 -
download
4
description
Transcript of Capítulo 10 - Sincronização de dados usando JSON
![Page 1: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/1.jpg)
Capítulo 10: Sincronização de dados
![Page 2: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/2.jpg)
M.Sc. Márcio Palheta
Instrutor
● Programador desde 2000
● Aluno de doutorado
● Mestre em informática pelo ICOMP/UFAM
● Especialista em aplicações WEB – FUCAPI
● sites.google.com/site/marciopalheta
![Page 3: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/3.jpg)
M.Sc. Márcio Palheta
3/55
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
![Page 4: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/4.jpg)
M.Sc. Márcio Palheta
4/55
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
![Page 5: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/5.jpg)
M.Sc. Márcio Palheta
5/55
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
![Page 6: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/6.jpg)
M.Sc. Márcio Palheta
6/55
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
![Page 7: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/7.jpg)
M.Sc. Márcio Palheta
7/55
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) {…
}
![Page 8: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/8.jpg)
M.Sc. Márcio Palheta
8/55
Exercício 01: AlunoConverter
![Page 9: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/9.jpg)
M.Sc. Márcio Palheta
9/55
Exercício 01: AlunoConverter Novo pacote
![Page 10: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/10.jpg)
M.Sc. Márcio Palheta
10/55
Exercício 01: AlunoConverter
Nova classepara conversãode Alunos em Arquivo JSON
Novo pacote
![Page 11: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/11.jpg)
M.Sc. Márcio Palheta
11/55
Exercício 01: AlunoConverter
Converte Alunosem dados JSON
![Page 12: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/12.jpg)
M.Sc. Márcio Palheta
12/55
Exercício 01: AlunoConverter
Converte Alunosem dados JSON
Criação de objetode escrita e
estrutura inicial
![Page 13: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/13.jpg)
M.Sc. Márcio Palheta
13/55
Exercício 01: AlunoConverter
Conversão deTipos de dados
![Page 14: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/14.jpg)
M.Sc. Márcio Palheta
14/55
Exercício 01: AlunoConverter
Conversão deTipos de dados
Fechamento daEstrutura e retornodo código gerado
![Page 15: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/15.jpg)
M.Sc. Márcio Palheta
15/55
String gerada
● 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/
{ "list": [ { "aluno": [ { "id": 1, "nome": "Maria de Oliveiras", "telefone": "092 3224567", "endereco": "Rua vai e volta", "site": "http://www.google.com", "email": "[email protected]", "nota": 4 }, { "id": 2, "nome": "Joana Silva", "telefone": "21456627", "endereco": "Rua A, 25, CD", "site": "www.joana.com", "email": "[email protected]", "nota": 8 } ] } ]}
![Page 16: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/16.jpg)
M.Sc. Márcio Palheta
16/55
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
![Page 17: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/17.jpg)
M.Sc. Márcio Palheta
17/55
Prévia do código
//Objeto para comunicacao com servidor remotoDefaultHttpClient httpClient = new DefaultHttpClient();//Objeto para encapsular a String gerada com JSONHttpPost 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 JSONpost.setHeader("Content-type", "application/json");post.setHeader("Accept", "application/json");//Execucao da requisicaoHttpResponse response = httpClient.execute(post);//Verificacao da repostaString jsonResposta =
EntityUtils.toString(response.getEntity());
return jsonResposta;
} catch (Exception e) {throw new RuntimeException(e);
}
![Page 18: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/18.jpg)
M.Sc. Márcio Palheta
18/55
Exercício 02: classe WebClient
![Page 19: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/19.jpg)
M.Sc. Márcio Palheta
19/55
Exercício 02: classe WebClient
Novo pacote
![Page 20: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/20.jpg)
M.Sc. Márcio Palheta
20/55
Exercício 02: classe WebClient
Nova classe para envio dos dados
Novo pacote
![Page 21: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/21.jpg)
M.Sc. Márcio Palheta
21/55
Exercício 02: classe WebClient
Definições da URLpara comunicação
![Page 22: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/22.jpg)
M.Sc. Márcio Palheta
22/55
Exercício 02: classe WebClient
Definições da URLpara comunicação
Método para envio de dados JSON
![Page 23: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/23.jpg)
M.Sc. Márcio Palheta
23/55
Exercício 02: classe WebClient
Objetos para comunicação
![Page 24: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/24.jpg)
M.Sc. Márcio Palheta
24/55
Exercício 02: classe WebClient
Formatação eenvio dos dados
Objetos para comunicação
![Page 25: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/25.jpg)
M.Sc. Márcio Palheta
25/55
Exercício 02: classe WebClient
Formatação eenvio dos dados
Objetos para comunicação
ProcessamentoDa resposta doServidor WEB
![Page 26: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/26.jpg)
M.Sc. Márcio Palheta
26/55
Exercício 02: classe WebClient
Formatação eenvio dos dados
Objetos para comunicação
ProcessamentoDa resposta doServidor WEB
Retorna o IP solicitante: {"ip": "189.48.181.194"}
![Page 27: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/27.jpg)
M.Sc. Márcio Palheta
27/55
Exercício 03: ListaAlunosActivity.java
![Page 28: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/28.jpg)
M.Sc. Márcio Palheta
28/55
Exercício 03: ListaAlunosActivity.java
![Page 29: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/29.jpg)
M.Sc. Márcio Palheta
29/55
Exercício 03: ListaAlunosActivity.java
![Page 30: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/30.jpg)
M.Sc. Márcio Palheta
30/55
Exercício 03: ListaAlunosActivity.java
![Page 31: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/31.jpg)
M.Sc. Márcio Palheta
31/55
Exercício 03: ListaAlunosActivity.java
![Page 32: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/32.jpg)
M.Sc. Márcio Palheta
32/55
Exercício 03: ListaAlunosActivity.java
![Page 33: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/33.jpg)
M.Sc. Márcio Palheta
33/55
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
![Page 34: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/34.jpg)
M.Sc. Márcio Palheta
34/55
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
![Page 35: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/35.jpg)
M.Sc. Márcio Palheta
35/55
Exercício 04: EnviaAlunosTask.java
![Page 36: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/36.jpg)
M.Sc. Márcio Palheta
36/55
Exercício 04: EnviaAlunosTask.javaNovo pacote
![Page 37: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/37.jpg)
M.Sc. Márcio Palheta
37/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
![Page 38: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/38.jpg)
M.Sc. Márcio Palheta
38/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
![Page 39: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/39.jpg)
M.Sc. Márcio Palheta
39/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
![Page 40: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/40.jpg)
M.Sc. Márcio Palheta
40/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
![Page 41: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/41.jpg)
M.Sc. Márcio Palheta
41/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
![Page 42: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/42.jpg)
M.Sc. Márcio Palheta
42/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
![Page 43: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/43.jpg)
M.Sc. Márcio Palheta
43/55
Exercício 04: Continuação...
![Page 44: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/44.jpg)
M.Sc. Márcio Palheta
44/55
Exercício 04: Continuação...Executado ANTESda sincronização
![Page 45: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/45.jpg)
M.Sc. Márcio Palheta
45/55
Exercício 04: Continuação...
Método que executaa sincronização
Executado ANTESda sincronização
![Page 46: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/46.jpg)
M.Sc. Márcio Palheta
46/55
Exercício 04: Continuação...
Método que executaa sincronização
Executado ANTESda sincronização
Executado DEPOISda sincronização
![Page 47: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/47.jpg)
M.Sc. Márcio Palheta
47/55
Exercício 05: ListaAlunosActivity
![Page 48: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/48.jpg)
M.Sc. Márcio Palheta
48/55
Exercício 05: ListaAlunosActivity
![Page 49: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/49.jpg)
M.Sc. Márcio Palheta
49/55
Execute novamente a App
![Page 50: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/50.jpg)
M.Sc. Márcio Palheta
50/55
Execute novamente a App
![Page 51: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/51.jpg)
M.Sc. Márcio Palheta
51/55
Execute novamente a App
![Page 52: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/52.jpg)
M.Sc. Márcio Palheta
52/55
Execute novamente a App
![Page 53: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/53.jpg)
M.Sc. Márcio Palheta
53/55
O que vem a seguir?
● Fragments
● Google Maps
● GPS
![Page 54: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/54.jpg)
M.Sc. Márcio Palheta
54/55
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
![Page 55: Capítulo 10 - Sincronização de dados usando JSON](https://reader034.fdocument.pub/reader034/viewer/2022042713/5496929eac7959222e8b5149/html5/thumbnails/55.jpg)
Capítulo 10: Sincronização de dados