SlideShare une entreprise Scribd logo
1  sur  91
Télécharger pour lire hors ligne
sábado, 17 de novembro de 12
Desenvolvedor de software
                                  www.carloscavalcanti.com
                                contato@carloscavalcanti.com
                                    twitter @carloscaval
                                 github.com/carloscavalcanti
                                slideshare.net/carloscavalcanti




sábado, 17 de novembro de 12
JSON


                               Integração com webservice


                                    Testes unitários


                                   Testes funcionais


                                      Fragments




sábado, 17 de novembro de 12
JSON




sábado, 17 de novembro de 12
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
Vamos imaginar uma
                    classe “Funcionario”




sábado, 17 de novembro de 12
Exemplo

                    public class Funcionario {

                               private String nome;
                               private String endereco;
                               private Date dataNascimento;




sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
E agora gostaria de
             transforma-la em JSON.




                               Como?
sábado, 17 de novembro de 12
Jackson


   http://jackson.codehaus.org/
sábado, 17 de novembro de 12
Como adicionar a
                            biblioteca?


sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
Json de um funcionário

           {"dataNascimento":60536862000000,
            "endereco":"Rua tal",
            "nome":"João"}




sábado, 17 de novembro de 12
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
Como implementar?

sábado, 17 de novembro de 12
Vamos utilizar a classe
                   ObjectMapper do
                       Jackson


sábado, 17 de novembro de 12
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 json

sábado, 17 de novembro de 12
Para gerar um JSON a partir de um
                objeto precisamos chamar o método
                        writeValueAsString.




sábado, 17 de novembro de 12
String writeValueAsString(Object value)




sábado, 17 de novembro de 12
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
output

           {"dataNascimento":60536862000000,
            "endereco":"Rua tal",
            "nome":"João"}




sábado, 17 de novembro de 12
E uma lista de
                               funcionários, como
                                     ficaria?




sábado, 17 de novembro de 12
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
output
                     [{"dataNascimento":60536862000000,
                       "endereco":"Rua tal",
                       "nome":"João"},
                      {"dataNascimento":58038951600000,
                       "endereco":"Rua teste",
                       "nome":"Maria"}]




sábado, 17 de novembro de 12
Beleza?




sábado, 17 de novembro de 12
Vamos imaginar agora
                 uma classe Pagamento


sábado, 17 de novembro de 12
Exemplo
   public class Pagamento {
   	
   	 private Funcionario funcionario;
   	 private Double valor;




sábado, 17 de novembro de 12
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
output - Pagamento
     {"funcionario":{
                     "dataNascimento":60536862000000,
                     "endereco":"Rua tal",
                     "nome":"João"
                    },
                    "valor":100.0}




sábado, 17 de novembro de 12
Vamos criar uma lista de
                 Pagamentos


sábado, 17 de novembro de 12
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
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
sábado, 17 de novembro de 12
Como podemos fazer o
                  inverso?

sábado, 17 de novembro de 12
Ler um JSON e
              transformar em objeto.


sábado, 17 de novembro de 12
Para isso usamos o
                        método readValue


sábado, 17 de novembro de 12
Object ReadValue(String, Class)




sábado, 17 de novembro de 12
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
Webservice



sábado, 17 de novembro de 12
Capturando dados




                               Request
                http://www.teste.com/pegarClientes




sábado, 17 de novembro de 12
Response




sábado, 17 de novembro de 12
Request

       http://www.teste.com/pegarClientes?dataUpdate=01012010




sábado, 17 de novembro de 12
Response




sábado, 17 de novembro de 12
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
Testes automatizados



sábado, 17 de novembro de 12
Porque testar?




sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
Alguns tipos de teste

               • Teste unitário
               • Teste funcional
               • Teste de integração
               • Teste de stress


sábado, 17 de novembro de 12
Alguém conhece?




sábado, 17 de novembro de 12
Usa?
sábado, 17 de novembro de 12
Teste unitário


                                    JUnit




sábado, 17 de novembro de 12
TDD (Test drive-development)



sábado, 17 de novembro de 12
Desenvolvimento
                          orientado a testes




sábado, 17 de novembro de 12
Caminho a seguir




sábado, 17 de novembro de 12
Passos de bebê




sábado, 17 de novembro de 12
Vamos lá

sábado, 17 de novembro de 12
DOJO


http://carloscavalcanti.com/2010/08/23/o-que-e-coding-dojo/

sábado, 17 de novembro de 12
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
http://dojopuzzles.com/problemas/exibe/jokenpo/




sábado, 17 de novembro de 12
Criando o projeto de
                         teste




sábado, 17 de novembro de 12
Padrão: nomeProjeto+Test




sábado, 17 de novembro de 12
Selecionando projeto Target




sábado, 17 de novembro de 12
Teste funcional

                       Robotium



                                  http://code.google.com/p/robotium/

sábado, 17 de novembro de 12
Criando projeto para
                          teste


sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
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
Classe Solo



sábado, 17 de novembro de 12
Exemplo
public 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
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
Fragments



sábado, 17 de novembro de 12
Como desenvolver layouts que sejam
                facilmente portados para smartphones e
                                tablets?




sábado, 17 de novembro de 12
Fragmento




sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
Ice Cream Sandwich


                       Horneycomb


                 Disponibilidade


sábado, 17 de novembro de 12
Android inferiores ao 3.0...




sábado, 17 de novembro de 12
Adicionamos a lib


                               Android-support-4




sábado, 17 de novembro de 12
sábado, 17 de novembro de 12
Por onde começar?



sábado, 17 de novembro de 12
Criando alguns
                               “fragmentos”


sábado, 17 de novembro de 12
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
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
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
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
E para juntarmos os fragments



                                Usamos uma classe que
                                      extenda de
                                   FragmentActivity



          E criamos um arquivo XML para juntar esses
                          fragments

sábado, 17 de novembro de 12
main_fragments.xml




sábado, 17 de novembro de 12
@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
sábado, 17 de novembro de 12
@CarlosCaval
                                         CarlosCavalcanti.com




               contato@carloscavalcanti.com


sábado, 17 de novembro de 12

Contenu connexe

Plus de Carlos Cavalcanti

Hello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no androidHello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no androidCarlos Cavalcanti
 
Testes automatizados de interface no Android
Testes automatizados de interface no AndroidTestes automatizados de interface no Android
Testes automatizados de interface no AndroidCarlos Cavalcanti
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Carlos Cavalcanti
 
Android: Mercado&Desenvolvimento
Android: Mercado&DesenvolvimentoAndroid: Mercado&Desenvolvimento
Android: Mercado&DesenvolvimentoCarlos Cavalcanti
 

Plus de Carlos Cavalcanti (8)

Study jam - dia 1
Study jam  - dia 1Study jam  - dia 1
Study jam - dia 1
 
Hello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no androidHello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no android
 
Testes automatizados de interface no Android
Testes automatizados de interface no AndroidTestes automatizados de interface no Android
Testes automatizados de interface no Android
 
Aula android 03
Aula android 03Aula android 03
Aula android 03
 
Aula android 01.pdf
Aula android 01.pdfAula android 01.pdf
Aula android 01.pdf
 
Introdução a java
Introdução a javaIntrodução a java
Introdução a java
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?
 
Android: Mercado&Desenvolvimento
Android: Mercado&DesenvolvimentoAndroid: Mercado&Desenvolvimento
Android: Mercado&Desenvolvimento
 

Aula android 05

  • 1. sábado, 17 de novembro de 12
  • 2. Desenvolvedor de software www.carloscavalcanti.com contato@carloscavalcanti.com twitter @carloscaval github.com/carloscavalcanti slideshare.net/carloscavalcanti sábado, 17 de novembro de 12
  • 3. JSON Integração com webservice Testes unitários Testes funcionais Fragments sábado, 17 de novembro de 12
  • 4. JSON sábado, 17 de novembro de 12
  • 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. Vamos imaginar uma classe “Funcionario” sábado, 17 de novembro de 12
  • 7. Exemplo public class Funcionario { private String nome; private String endereco; private Date dataNascimento; sábado, 17 de novembro de 12
  • 8. sábado, 17 de novembro de 12
  • 9. E agora gostaria de transforma-la em JSON. Como? sábado, 17 de novembro de 12
  • 10. Jackson http://jackson.codehaus.org/ sábado, 17 de novembro de 12
  • 11. Como adicionar a biblioteca? sábado, 17 de novembro de 12
  • 12. sábado, 17 de novembro de 12
  • 13. sábado, 17 de novembro de 12
  • 14. sábado, 17 de novembro de 12
  • 15. Json de um funcionário {"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"} sábado, 17 de novembro de 12
  • 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. Como implementar? sábado, 17 de novembro de 12
  • 18. Vamos utilizar a classe ObjectMapper do Jackson sábado, 17 de novembro de 12
  • 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 json sábado, 17 de novembro de 12
  • 20. Para gerar um JSON a partir de um objeto precisamos chamar o método writeValueAsString. sábado, 17 de novembro de 12
  • 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. output {"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"} sábado, 17 de novembro de 12
  • 24. E uma lista de funcionários, como ficaria? sábado, 17 de novembro de 12
  • 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. output [{"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"}, {"dataNascimento":58038951600000, "endereco":"Rua teste", "nome":"Maria"}] sábado, 17 de novembro de 12
  • 27. Beleza? sábado, 17 de novembro de 12
  • 28. Vamos imaginar agora uma classe Pagamento sábado, 17 de novembro de 12
  • 29. Exemplo public class Pagamento { private Funcionario funcionario; private Double valor; sábado, 17 de novembro de 12
  • 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. output - Pagamento {"funcionario":{ "dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João" }, "valor":100.0} sábado, 17 de novembro de 12
  • 32. Vamos criar uma lista de Pagamentos sábado, 17 de novembro de 12
  • 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. 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. sábado, 17 de novembro de 12
  • 36. Como podemos fazer o inverso? sábado, 17 de novembro de 12
  • 37. Ler um JSON e transformar em objeto. sábado, 17 de novembro de 12
  • 38. Para isso usamos o método readValue sábado, 17 de novembro de 12
  • 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. Webservice sábado, 17 de novembro de 12
  • 42. Capturando dados Request http://www.teste.com/pegarClientes sábado, 17 de novembro de 12
  • 43. Response sábado, 17 de novembro de 12
  • 44. Request http://www.teste.com/pegarClientes?dataUpdate=01012010 sábado, 17 de novembro de 12
  • 45. Response sábado, 17 de novembro de 12
  • 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. Testes automatizados sábado, 17 de novembro de 12
  • 48. Porque testar? sábado, 17 de novembro de 12
  • 49. sábado, 17 de novembro de 12
  • 50. Alguns tipos de teste • Teste unitário • Teste funcional • Teste de integração • Teste de stress sábado, 17 de novembro de 12
  • 51. Alguém conhece? sábado, 17 de novembro de 12
  • 52. Usa? sábado, 17 de novembro de 12
  • 53. Teste unitário JUnit sábado, 17 de novembro de 12
  • 55. Desenvolvimento orientado a testes sábado, 17 de novembro de 12
  • 56. Caminho a seguir sábado, 17 de novembro de 12
  • 57. Passos de bebê sábado, 17 de novembro de 12
  • 58. Vamos lá sábado, 17 de novembro de 12
  • 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
  • 62. Criando o projeto de teste sábado, 17 de novembro de 12
  • 64. Selecionando projeto Target sábado, 17 de novembro de 12
  • 65. Teste funcional Robotium http://code.google.com/p/robotium/ sábado, 17 de novembro de 12
  • 66. Criando projeto para teste sábado, 17 de novembro de 12
  • 67. sábado, 17 de novembro de 12
  • 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. Classe Solo sábado, 17 de novembro de 12
  • 70. Exemplo public 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. 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. Fragments sábado, 17 de novembro de 12
  • 73. Como desenvolver layouts que sejam facilmente portados para smartphones e tablets? sábado, 17 de novembro de 12
  • 74. Fragmento sábado, 17 de novembro de 12
  • 75. sábado, 17 de novembro de 12
  • 76. sábado, 17 de novembro de 12
  • 77. Ice Cream Sandwich Horneycomb Disponibilidade sábado, 17 de novembro de 12
  • 78. Android inferiores ao 3.0... sábado, 17 de novembro de 12
  • 79. Adicionamos a lib Android-support-4 sábado, 17 de novembro de 12
  • 80. sábado, 17 de novembro de 12
  • 81. Por onde começar? sábado, 17 de novembro de 12
  • 82. Criando alguns “fragmentos” sábado, 17 de novembro de 12
  • 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. 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. 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. 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. E para juntarmos os fragments Usamos uma classe que extenda de FragmentActivity E criamos um arquivo XML para juntar esses fragments sábado, 17 de novembro de 12
  • 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. sábado, 17 de novembro de 12
  • 91. @CarlosCaval CarlosCavalcanti.com contato@carloscavalcanti.com sábado, 17 de novembro de 12