Top Banner
sábado, 17 de novembro de 12
91

Aula android 05

Jul 09, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Aula android 05

sábado, 17 de novembro de 12

Page 3: Aula android 05

Integração com webservice

Testes unitários

JSON

Testes funcionais

Fragments

sábado, 17 de novembro de 12

Page 4: Aula android 05

JSON

sábado, 17 de novembro de 12

Page 5: Aula android 05

JSON

{ "Aluno" : [ { "nome": "João", "notas": [ 8, 9, 7 ] }, { "nome": "Maria", "notas": [ 8, 10, 7 ] }, { "nome": "Pedro", "notas": [ 10, 10, 9 ] } ]}

JSON (com a pronúncia ['dʒejzən]), um acrônimo para "JavaScript Object Notation", é um formato leve para intercâmbio de dados computacionais.

Wikipedia

sábado, 17 de novembro de 12

Page 6: Aula android 05

Vamos imaginar uma classe “Funcionario”

sábado, 17 de novembro de 12

Page 7: Aula android 05

Exemplo

public class Funcionario {

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

sábado, 17 de novembro de 12

Page 8: Aula android 05

sábado, 17 de novembro de 12

Page 9: Aula android 05

E agora gostaria de transforma-la em JSON.

Como?sábado, 17 de novembro de 12

Page 10: Aula android 05

Jackson

http://jackson.codehaus.org/sábado, 17 de novembro de 12

Page 11: Aula android 05

Como adicionar a biblioteca?

sábado, 17 de novembro de 12

Page 12: Aula android 05

sábado, 17 de novembro de 12

Page 13: Aula android 05

sábado, 17 de novembro de 12

Page 14: Aula android 05

sábado, 17 de novembro de 12

Page 15: Aula android 05

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

Json de um funcionário

sábado, 17 de novembro de 12

Page 16: Aula android 05

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

Page 17: Aula android 05

Como implementar?

sábado, 17 de novembro de 12

Page 18: Aula android 05

Vamos utilizar a classe ObjectMapper do

Jackson

sábado, 17 de novembro de 12

Page 19: Aula android 05

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

Page 20: Aula android 05

Para gerar um JSON a partir de um objeto precisamos chamar o método

writeValueAsString.

sábado, 17 de novembro de 12

Page 21: Aula android 05

String writeValueAsString(Object value)

sábado, 17 de novembro de 12

Page 22: Aula android 05

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

Page 23: Aula android 05

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

output

sábado, 17 de novembro de 12

Page 24: Aula android 05

E uma lista de funcionários, como

ficaria?

sábado, 17 de novembro de 12

Page 25: Aula android 05

ExemploFuncionario 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

Page 26: Aula android 05

output

[{"dataNascimento":60536862000000, "endereco":"Rua tal", "nome":"João"}, {"dataNascimento":58038951600000, "endereco":"Rua teste", "nome":"Maria"}]

sábado, 17 de novembro de 12

Page 27: Aula android 05

Beleza?

sábado, 17 de novembro de 12

Page 28: Aula android 05

Vamos imaginar agora uma classe Pagamento

sábado, 17 de novembro de 12

Page 29: Aula android 05

Exemplo

public class Pagamento { private Funcionario funcionario; private Double valor;

sábado, 17 de novembro de 12

Page 30: Aula android 05

Pagamento pagamento01 = new Pagamento(funcionario01, 100.0);try { System.out.println(mapper.writeValueAsString(pagamento01));} catch (Exception e) { e.printStackTrace();}

Código

sábado, 17 de novembro de 12

Page 31: Aula android 05

output - Pagamento

{"funcionario":{ "dataNascimento":60536862000000,

"endereco":"Rua tal", "nome":"João" }, "valor":100.0}

sábado, 17 de novembro de 12

Page 32: Aula android 05

Vamos criar uma lista de Pagamentos

sábado, 17 de novembro de 12

Page 33: Aula android 05

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

Page 34: Aula android 05

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

Page 35: Aula android 05

sábado, 17 de novembro de 12

Page 36: Aula android 05

Como podemos fazer o inverso?

sábado, 17 de novembro de 12

Page 37: Aula android 05

Ler um JSON e transformar em objeto.

sábado, 17 de novembro de 12

Page 38: Aula android 05

Para isso usamos o método readValue

sábado, 17 de novembro de 12

Page 39: Aula android 05

Object ReadValue(String, Class)

sábado, 17 de novembro de 12

Page 40: Aula android 05

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

Page 41: Aula android 05

Webservice

sábado, 17 de novembro de 12

Page 42: Aula android 05

Requesthttp://www.teste.com/pegarClientes

Capturando dados

sábado, 17 de novembro de 12

Page 43: Aula android 05

Response

sábado, 17 de novembro de 12

Page 44: Aula android 05

Request

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

sábado, 17 de novembro de 12

Page 45: Aula android 05

Response

sábado, 17 de novembro de 12

Page 46: Aula android 05

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

Page 47: Aula android 05

Testes automatizados

sábado, 17 de novembro de 12

Page 48: Aula android 05

Porque testar?

sábado, 17 de novembro de 12

Page 49: Aula android 05

sábado, 17 de novembro de 12

Page 50: Aula android 05

Alguns tipos de teste

• Teste unitário

• Teste funcional

• Teste de integração

• Teste de stress

sábado, 17 de novembro de 12

Page 51: Aula android 05

Alguém conhece?

sábado, 17 de novembro de 12

Page 52: Aula android 05

Usa?sábado, 17 de novembro de 12

Page 53: Aula android 05

Teste unitário

JUnit

sábado, 17 de novembro de 12

Page 54: Aula android 05

TDD (Test drive-development)

sábado, 17 de novembro de 12

Page 55: Aula android 05

Desenvolvimento orientado a testes

sábado, 17 de novembro de 12

Page 56: Aula android 05

Caminho a seguir

sábado, 17 de novembro de 12

Page 57: Aula android 05

Passos de bebê

sábado, 17 de novembro de 12

Page 58: Aula android 05

Vamos lá

sábado, 17 de novembro de 12

Page 59: Aula android 05

DOJO

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

sábado, 17 de novembro de 12

Page 60: Aula android 05

Três momentos:

1. o Vermelho: Quando um ou mais testes não estão passando. Adupla que está de “posse” do computador deve fazer o teste passar e aplaté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 ocódigo.

3. o Amarelo: Resumindo, refatoração. Após a platéia darsugestões de modificações.

sábado, 17 de novembro de 12

Page 61: Aula android 05

http://dojopuzzles.com/problemas/exibe/jokenpo/

sábado, 17 de novembro de 12

Page 62: Aula android 05

Criando o projeto de teste

sábado, 17 de novembro de 12

Page 63: Aula android 05

Padrão: nomeProjeto+Test

sábado, 17 de novembro de 12

Page 64: Aula android 05

Selecionando projeto Target

sábado, 17 de novembro de 12

Page 65: Aula android 05

Teste funcional

Robotium

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

sábado, 17 de novembro de 12

Page 66: Aula android 05

Criando projeto para teste

sábado, 17 de novembro de 12

Page 67: Aula android 05

sábado, 17 de novembro de 12

Page 68: Aula android 05

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

Page 69: Aula android 05

Classe Solo

sábado, 17 de novembro de 12

Page 70: Aula android 05

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

Page 71: Aula android 05

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

Page 72: Aula android 05

Fragments

sábado, 17 de novembro de 12

Page 73: Aula android 05

Como desenvolver layouts que sejam facilmente portados para smartphones e

tablets?

sábado, 17 de novembro de 12

Page 74: Aula android 05

Fragmento

sábado, 17 de novembro de 12

Page 75: Aula android 05

sábado, 17 de novembro de 12

Page 76: Aula android 05

sábado, 17 de novembro de 12

Page 77: Aula android 05

Disponibilidade

Horneycomb

Ice Cream Sandwich

sábado, 17 de novembro de 12

Page 78: Aula android 05

Android inferiores ao 3.0...

sábado, 17 de novembro de 12

Page 79: Aula android 05

Adicionamos a lib

Android-support-4

sábado, 17 de novembro de 12

Page 80: Aula android 05

sábado, 17 de novembro de 12

Page 81: Aula android 05

Por onde começar?

sábado, 17 de novembro de 12

Page 82: Aula android 05

Criando alguns “fragmentos”

sábado, 17 de novembro de 12

Page 83: Aula android 05

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

Page 84: Aula android 05

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

Page 85: Aula android 05

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

Page 86: Aula android 05

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

Page 87: Aula android 05

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

Page 88: Aula android 05

main_fragments.xml

sábado, 17 de novembro de 12

Page 89: Aula android 05

@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

Page 90: Aula android 05

sábado, 17 de novembro de 12

Page 91: Aula android 05

@CarlosCaval

[email protected]

CarlosCavalcanti.com

sábado, 17 de novembro de 12