Your SlideShare is downloading. ×
Capítulo 10 - Sincronização de dados usando JSON
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

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

3,952
views

Published on

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

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

Published in: Education

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,952
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
355
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Capítulo 10: Sincronização de dados
  • 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. 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. 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. 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. 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. 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. Exercício 01: AlunoConverter M.Sc. Márcio Palheta 8/55
  • 9. Exercício 01: AlunoConverter Novo pacote M.Sc. Márcio Palheta 9/55
  • 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. Exercício 01: AlunoConverter Converte Alunos em dados JSON M.Sc. Márcio Palheta 11/55
  • 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. Exercício 01: AlunoConverter Conversão de Tipos de dados M.Sc. Márcio Palheta 13/55
  • 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. 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. 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. 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. Exercício 02: classe WebClient M.Sc. Márcio Palheta 18/55
  • 19. Exercício 02: classe WebClient Novo pacote M.Sc. Márcio Palheta 19/55
  • 20. Exercício 02: classe WebClient Novo pacote Nova classe para envio dos dados M.Sc. Márcio Palheta 20/55
  • 21. Exercício 02: classe WebClient Definições da URL para comunicação M.Sc. Márcio Palheta 21/55
  • 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. Exercício 02: classe WebClient Objetos para comunicação M.Sc. Márcio Palheta 23/55
  • 24. Exercício 02: classe WebClient Objetos para comunicação Formatação e envio dos dados M.Sc. Márcio Palheta 24/55
  • 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. 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. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 27/55
  • 28. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 28/55
  • 29. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 29/55
  • 30. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 30/55
  • 31. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 31/55
  • 32. Exercício 03: ListaAlunosActivity.java M.Sc. Márcio Palheta 32/55
  • 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. 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. Exercício 04: EnviaAlunosTask.java M.Sc. Márcio Palheta 35/55
  • 36. Exercício 04: EnviaAlunosTask.java Novo pacote M.Sc. Márcio Palheta 36/55
  • 37. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask M.Sc. Márcio Palheta 37/55
  • 38. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 38/55
  • 39. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 39/55
  • 40. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 40/55
  • 41. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 41/55
  • 42. Exercício 04: EnviaAlunosTask.java Novo pacote Classe filha de AsyncTask Tipo de retorno M.Sc. Márcio Palheta 42/55
  • 43. Exercício 04: Continuação... M.Sc. Márcio Palheta 43/55
  • 44. Executado ANTES da sincronização Exercício 04: Continuação... M.Sc. Márcio Palheta 44/55
  • 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. 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. Exercício 05: ListaAlunosActivity M.Sc. Márcio Palheta 47/55
  • 48. Exercício 05: ListaAlunosActivity M.Sc. Márcio Palheta 48/55
  • 49. Execute novamente a App M.Sc. Márcio Palheta 49/55
  • 50. Execute novamente a App M.Sc. Márcio Palheta 50/55
  • 51. Execute novamente a App M.Sc. Márcio Palheta 51/55
  • 52. Execute novamente a App M.Sc. Márcio Palheta 52/55
  • 53. O que vem a seguir? ● Fragments ● Google Maps ● GPS M.Sc. Márcio Palheta 53/55
  • 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. Capítulo 10: Sincronização de dados