Aula android 05

708 views
658 views

Published on

1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
708
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
54
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Aula android 05

  1. 1. sábado, 17 de novembro de 12
  2. 2. Desenvolvedor de software www.carloscavalcanti.com contato@carloscavalcanti.com twitter @carloscaval github.com/carloscavalcanti slideshare.net/carloscavalcantisábado, 17 de novembro de 12
  3. 3. JSON Integração com webservice Testes unitários Testes funcionais Fragmentssábado, 17 de novembro de 12
  4. 4. JSONsábado, 17 de novembro de 12
  5. 5. JSON JSON (com a pronúncia [dʒejzən]), um acrônimo para "JavaScript Wikipedia Object Notation", é um formato leve para intercâmbio de dados computacionais. { "Aluno" : [ { "nome": "João", "notas": [ 8, 9, 7 ] }, { "nome": "Maria", "notas": [ 8, 10, 7 ] }, { "nome": "Pedro", "notas": [ 10, 10, 9 ] } ] }sábado, 17 de novembro de 12
  6. 6. Vamos imaginar uma classe “Funcionario”sábado, 17 de novembro de 12
  7. 7. Exemplo public class Funcionario { private String nome; private String endereco; private Date dataNascimento;sábado, 17 de novembro de 12
  8. 8. sábado, 17 de novembro de 12
  9. 9. E agora gostaria de transforma-la em JSON. Como?sábado, 17 de novembro de 12
  10. 10. Jackson http://jackson.codehaus.org/sábado, 17 de novembro de 12
  11. 11. Como adicionar a biblioteca?sábado, 17 de novembro de 12
  12. 12. sábado, 17 de novembro de 12
  13. 13. sábado, 17 de novembro de 12
  14. 14. sábado, 17 de novembro de 12
  15. 15. Json de um funcionário {"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"}sábado, 17 de novembro de 12
  16. 16. Json de uma lista de funcionários [{"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"}, {"dataNascimento":58038951600000, "endereco":"Rua teste", "nome":"Maria"}]sábado, 17 de novembro de 12
  17. 17. Como implementar?sábado, 17 de novembro de 12
  18. 18. Vamos utilizar a classe ObjectMapper do Jacksonsábado, 17 de novembro de 12
  19. 19. A classe ObjectMapper nos dará as ferramentas necessárias para gerar um json a partir de uma instância de um objeto ou gerar um objeto a partir de um jsonsábado, 17 de novembro de 12
  20. 20. Para gerar um JSON a partir de um objeto precisamos chamar o método writeValueAsString.sábado, 17 de novembro de 12
  21. 21. String writeValueAsString(Object value)sábado, 17 de novembro de 12
  22. 22. Exemplo Funcionario funcionario01 = new Funcionario("João", "Rua tal", new Date(1988, 4, 3)); ObjectMapper mapper = new ObjectMapper(); try { System.out.println(mapper.writeValueAsString(funcionario01); } catch (Exception e) { e.printStackTrace(); }sábado, 17 de novembro de 12
  23. 23. output {"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"}sábado, 17 de novembro de 12
  24. 24. E uma lista de funcionários, como ficaria?sábado, 17 de novembro de 12
  25. 25. Exemplo Funcionario funcionario01 = new Funcionario("João", "Rua tal", new Date(1988, 4, 3)); Funcionario funcionario02 = new Funcionario("Maria", "Rua teste", new Date(1909, 2, List<Funcionario> funcionarios = new ArrayList<Funcionario>(); funcionarios.add(funcionario01); funcionarios.add(funcionario02); ObjectMapper mapper = new ObjectMapper(); try { System.out.println(mapper.writeValueAsString(funcionarios)); } catch (Exception e) { e.printStackTrace(); }sábado, 17 de novembro de 12
  26. 26. output [{"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"}, {"dataNascimento":58038951600000, "endereco":"Rua teste", "nome":"Maria"}]sábado, 17 de novembro de 12
  27. 27. Beleza?sábado, 17 de novembro de 12
  28. 28. Vamos imaginar agora uma classe Pagamentosábado, 17 de novembro de 12
  29. 29. Exemplo public class Pagamento { private Funcionario funcionario; private Double valor;sábado, 17 de novembro de 12
  30. 30. Código Pagamento pagamento01 = new Pagamento(funcionario01, 100.0); try { System.out.println(mapper.writeValueAsString(pagamento01)); } catch (Exception e) { e.printStackTrace(); }sábado, 17 de novembro de 12
  31. 31. output - Pagamento {"funcionario":{ "dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João" }, "valor":100.0}sábado, 17 de novembro de 12
  32. 32. Vamos criar uma lista de Pagamentossábado, 17 de novembro de 12
  33. 33. Código List<Pagamento> pagamentos = new ArrayList<Pagamento>(); pagamentos.add(pagamento01); pagamentos.add(pagamento02); try { System.out.println(mapper.writeValueAsString(pagamentos)); } catch (Exception e) { e.printStackTrace(); }sábado, 17 de novembro de 12
  34. 34. output - Lista de Pagamentos[{"funcionario":{ "dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"}, "valor":100.0 },{"funcionario":{ "dataNascimento":58038951600000, "endereco":"Rua teste", "nome":"Maria"}, "valor":1560.3 }]sábado, 17 de novembro de 12
  35. 35. sábado, 17 de novembro de 12
  36. 36. Como podemos fazer o inverso?sábado, 17 de novembro de 12
  37. 37. Ler um JSON e transformar em objeto.sábado, 17 de novembro de 12
  38. 38. Para isso usamos o método readValuesábado, 17 de novembro de 12
  39. 39. Object ReadValue(String, Class)sábado, 17 de novembro de 12
  40. 40. Exemplo ObjectMapper mapper = new ObjectMapper(); try { String json = "{"dataNascimento":60536862000000,"endereco":"Rua tal","nome": "João"}"; Funcionario funcionario = mapper.readValue(json, Funcionario.class); System.out.println("funcionario: " + funcionario.getNome()); } catch (Exception e) { e.printStackTrace(); }sábado, 17 de novembro de 12
  41. 41. Webservicesábado, 17 de novembro de 12
  42. 42. Capturando dados Request http://www.teste.com/pegarClientessábado, 17 de novembro de 12
  43. 43. Responsesábado, 17 de novembro de 12
  44. 44. Request http://www.teste.com/pegarClientes?dataUpdate=01012010sábado, 17 de novembro de 12
  45. 45. Responsesábado, 17 de novembro de 12
  46. 46. Exemplo HttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("URL"); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("parametro", "valor")); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httpPost); System.out.println("response code: " + response.getStatusLine().getStatusCode()); System.out.println("texto: " + EntityUtils.toString(response.getEntity())); } catch (Exception e) { e.printStackTrace(); }sábado, 17 de novembro de 12
  47. 47. Testes automatizadossábado, 17 de novembro de 12
  48. 48. Porque testar?sábado, 17 de novembro de 12
  49. 49. sábado, 17 de novembro de 12
  50. 50. Alguns tipos de teste • Teste unitário • Teste funcional • Teste de integração • Teste de stresssábado, 17 de novembro de 12
  51. 51. Alguém conhece?sábado, 17 de novembro de 12
  52. 52. Usa?sábado, 17 de novembro de 12
  53. 53. Teste unitário JUnitsábado, 17 de novembro de 12
  54. 54. TDD (Test drive-development)sábado, 17 de novembro de 12
  55. 55. Desenvolvimento orientado a testessábado, 17 de novembro de 12
  56. 56. Caminho a seguirsábado, 17 de novembro de 12
  57. 57. Passos de bebêsábado, 17 de novembro de 12
  58. 58. Vamos lásábado, 17 de novembro de 12
  59. 59. DOJOhttp://carloscavalcanti.com/2010/08/23/o-que-e-coding-dojo/sábado, 17 de novembro de 12
  60. 60. Três momentos: 1. o Vermelho: Quando um ou mais testes não estão passando. A dupla que está de “posse” do computador deve fazer o teste passar e a platéia não deve falar neste momento, para não atrapalhar. 2. o Verde: Quando os testes são rodados e os mesmos passados, aí sim, neste momento a platéia poderá dar sugestões para melhor o código. 3. o Amarelo: Resumindo, refatoração. Após a platéia dar sugestões de modificações.sábado, 17 de novembro de 12
  61. 61. http://dojopuzzles.com/problemas/exibe/jokenpo/sábado, 17 de novembro de 12
  62. 62. Criando o projeto de testesábado, 17 de novembro de 12
  63. 63. Padrão: nomeProjeto+Testsábado, 17 de novembro de 12
  64. 64. Selecionando projeto Targetsábado, 17 de novembro de 12
  65. 65. Teste funcional Robotium http://code.google.com/p/robotium/sábado, 17 de novembro de 12
  66. 66. Criando projeto para testesábado, 17 de novembro de 12
  67. 67. sábado, 17 de novembro de 12
  68. 68. Adicionar no manifest do projeto de teste <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.exemplorobotium" />sábado, 17 de novembro de 12
  69. 69. Classe Solosábado, 17 de novembro de 12
  70. 70. Exemplopublic class TestRobotium extends ActivityInstrumentationTestCase2<MainActivity>{ private Solo solo; public TestRobotium() { super("com.example.exemplorobotium", MainActivity.class); } public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); }sábado, 17 de novembro de 12
  71. 71. public void testBotaoDaSegundaTela() { assertTrue(solo.searchText("Testando")); solo.clickOnButton(0); solo.enterText(0, "Olá"); solo.clickOnButton(0); assertTrue(solo.searchText("Olá")); solo.sleep(2000); solo.clearEditText(0); solo.enterText(0, "Teste 01"); solo.clickOnButton(0); assertTrue(solo.searchText("Teste 01")); solo.sleep(2000); solo.clearEditText(0); solo.enterText(0, "ABC!"); solo.clickOnButton(0); assertTrue(solo.searchText("ABC!")); }sábado, 17 de novembro de 12
  72. 72. Fragmentssábado, 17 de novembro de 12
  73. 73. Como desenvolver layouts que sejam facilmente portados para smartphones e tablets?sábado, 17 de novembro de 12
  74. 74. Fragmentosábado, 17 de novembro de 12
  75. 75. sábado, 17 de novembro de 12
  76. 76. sábado, 17 de novembro de 12
  77. 77. Ice Cream Sandwich Horneycomb Disponibilidadesábado, 17 de novembro de 12
  78. 78. Android inferiores ao 3.0...sábado, 17 de novembro de 12
  79. 79. Adicionamos a lib Android-support-4sábado, 17 de novembro de 12
  80. 80. sábado, 17 de novembro de 12
  81. 81. Por onde começar?sábado, 17 de novembro de 12
  82. 82. Criando alguns “fragmentos”sábado, 17 de novembro de 12
  83. 83. Criar 3 layouts e em cada um inserir um textView <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Frag 1" android:textColor="#000000" android:textSize="18sp" android:textStyle="bold" /> </LinearLayout>sábado, 17 de novembro de 12
  84. 84. Para cara fragment devemos criar uma classe que extenda de Fragment public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, null); TextView text = (TextView) view.findViewById(R.id.text1); text.setText("Fragment 1"); return view; } }sábado, 17 de novembro de 12
  85. 85. public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment2, null); TextView text = (TextView) view.findViewById(R.id.text2); text.setText("Fragment 2"); setRetainInstance(true); return view; } public void setTexto(String msg) { View view = getView(); if (view != null) { TextView text = (TextView) view.findViewById(R.id.text2); text.setText(msg); } } }sábado, 17 de novembro de 12
  86. 86. public class Fragment3 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment3, null); TextView text = (TextView) view.findViewById(R.id.text3); text.setText("Fragment 3"); return view; } }sábado, 17 de novembro de 12
  87. 87. E para juntarmos os fragments Usamos uma classe que extenda de FragmentActivity E criamos um arquivo XML para juntar esses fragmentssábado, 17 de novembro de 12
  88. 88. main_fragments.xmlsábado, 17 de novembro de 12
  89. 89. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_fragments); } @Override public boolean onCreateOptionsMenu(android.view.Menu menu) { menu.add(0, 0, 0, "Alterar do Fragment 2"); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { FragmentManager fm = getSupportFragmentManager(); switch (item.getItemId()) { case 0: Fragment2 frag2 = (Fragment2) fm.findFragmentById(R.id.frag2); frag2.setTexto("Novo Texto"); break; } return true; }sábado, 17 de novembro de 12
  90. 90. sábado, 17 de novembro de 12
  91. 91. @CarlosCaval CarlosCavalcanti.com contato@carloscavalcanti.comsábado, 17 de novembro de 12

×