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
Capítulo 10: Sincronização de dados
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
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
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
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
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
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) {…
}
M.Sc. Márcio Palheta
8/55
Exercício 01: AlunoConverter
M.Sc. Márcio Palheta
9/55
Exercício 01: AlunoConverter Novo pacote
M.Sc. Márcio Palheta
10/55
Exercício 01: AlunoConverter
Nova classepara conversãode Alunos em Arquivo JSON
Novo pacote
M.Sc. Márcio Palheta
11/55
Exercício 01: AlunoConverter
Converte Alunosem dados JSON
M.Sc. Márcio Palheta
12/55
Exercício 01: AlunoConverter
Converte Alunosem dados JSON
Criação de objetode escrita e
estrutura inicial
M.Sc. Márcio Palheta
13/55
Exercício 01: AlunoConverter
Conversão deTipos de dados
M.Sc. Márcio Palheta
14/55
Exercício 01: AlunoConverter
Conversão deTipos de dados
Fechamento daEstrutura e retornodo código gerado
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 } ] } ]}
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
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);
}
M.Sc. Márcio Palheta
18/55
Exercício 02: classe WebClient
M.Sc. Márcio Palheta
19/55
Exercício 02: classe WebClient
Novo pacote
M.Sc. Márcio Palheta
20/55
Exercício 02: classe WebClient
Nova classe para envio dos dados
Novo pacote
M.Sc. Márcio Palheta
21/55
Exercício 02: classe WebClient
Definições da URLpara comunicação
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
M.Sc. Márcio Palheta
23/55
Exercício 02: classe WebClient
Objetos para comunicação
M.Sc. Márcio Palheta
24/55
Exercício 02: classe WebClient
Formatação eenvio dos dados
Objetos para comunicação
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
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"}
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
Exercício 03: ListaAlunosActivity.java
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
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
M.Sc. Márcio Palheta
35/55
Exercício 04: EnviaAlunosTask.java
M.Sc. Márcio Palheta
36/55
Exercício 04: EnviaAlunosTask.javaNovo pacote
M.Sc. Márcio Palheta
37/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
M.Sc. Márcio Palheta
38/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
M.Sc. Márcio Palheta
39/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
M.Sc. Márcio Palheta
40/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
M.Sc. Márcio Palheta
41/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
M.Sc. Márcio Palheta
42/55
Exercício 04: EnviaAlunosTask.java
Classe filha deAsyncTask
Novo pacote
Tipo de retorno
M.Sc. Márcio Palheta
43/55
Exercício 04: Continuação...
M.Sc. Márcio Palheta
44/55
Exercício 04: Continuação...Executado ANTESda sincronização
M.Sc. Márcio Palheta
45/55
Exercício 04: Continuação...
Método que executaa sincronização
Executado ANTESda sincronização
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
M.Sc. Márcio Palheta
47/55
Exercício 05: ListaAlunosActivity
M.Sc. Márcio Palheta
48/55
Exercício 05: ListaAlunosActivity
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
Execute novamente a App
M.Sc. Márcio Palheta
53/55
O que vem a seguir?
● Fragments
● Google Maps
● GPS
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
Capítulo 10: Sincronização de dados