Aula android 04

1,166 views

Published on

Quarta aula de Android.
Apresentação sobre:
-Listagem simples e complexa.
-Trabalhando com relacionamentos com o ORMLite
-Utilizando a câmera

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,166
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
60
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Aula android 04

  1. 1. sábado, 10 de novembro de 12
  2. 2. Desenvolvedor de software www.carloscavalcanti.com contato@carloscavalcanti.com twitter @carloscaval github.com/carloscavalcanti slideshare.net/carloscavalcantisábado, 10 de novembro de 12
  3. 3. sábado, 10 de novembro de 12
  4. 4. sábado, 10 de novembro de 12
  5. 5. Desenvolvedor de 17 anos cria app para iPhone e recebe US$ 1 milhão Summly é um app para iOS que oferece um leitor de notícias que permite navegar mais rápido. Através de sua tecnologia de inteligência artificial, ele oferece resumos concisos do conteúdo online.sábado, 10 de novembro de 12
  6. 6. Listagem ORMLite Câmerasábado, 10 de novembro de 12
  7. 7. sábado, 10 de novembro de 12
  8. 8. Criando uma lista simplessábado, 10 de novembro de 12
  9. 9. O que é necessário?sábado, 10 de novembro de 12
  10. 10. O que é necessário? Classe ListActivity Arquivo XML para exibir conteúdo da linha Objeto Adaptersábado, 10 de novembro de 12
  11. 11. Exemplopublic class MainActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String nomes[] = new String[]{"João", "Maria", "Cristina","Marcos", "Eric", "Tâmara", "Joana", "Junior", "Bruna", "André"}; ArrayAdapter arrayAdapter = new ArrayAdapter(this,R.layout.activity_main, nomes); setListAdapter(arrayAdapter); }}sábado, 10 de novembro de 12
  12. 12. Ao clicar em um item fazer alguma açãosábado, 10 de novembro de 12
  13. 13. Evento click ListView listView = getListView(); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(), Toast.LENGTH_SHORT).show(); } });sábado, 10 de novembro de 12
  14. 14. Código@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String nomes[] = new String[]{"João", "Maria", "Cristina", "Marcos", "Eric", "Tâmara", "Joana", "Junior", "Bruna", "André"}; ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.activity_main, nomes); setListAdapter(arrayAdapter); ListView listView = getListView(); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(), Toast.LENGTH_SHORT).show(); } }); }sábado, 10 de novembro de 12
  15. 15. sábado, 10 de novembro de 12
  16. 16. Listagem complexasábado, 10 de novembro de 12
  17. 17. Vamos imaginar uma classe Cliente. E vamos exibir uma lista de clientessábado, 10 de novembro de 12
  18. 18. Classe Cliente public class Cliente { private String nome; private Date dataNascimento;sábado, 10 de novembro de 12
  19. 19. Layoutsábado, 10 de novembro de 12
  20. 20. Como eu quero exibir os dados?sábado, 10 de novembro de 12
  21. 21. Precisamos criar um layout para representar uma linha da nossa listagemsábado, 10 de novembro de 12
  22. 22. <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayoutItem" android:layout_height="wrap_content" android:layout_width="wrap_content" android:gravity="left|center" android:paddingBottom="5sp" android:paddingTop="5sp" android:paddingLeft="5sp"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/txtNome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="Nome" android:textSize="20sp" android:layout_marginLeft="15sp"/> <TextView android:id="@+id/txtDataNascimento" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="01/01/1999" android:textSize="20sp" android:layout_marginLeft="20sp" /> </LinearLayout></LinearLayout>sábado, 10 de novembro de 12
  23. 23. E agora precisamos de uma listasábado, 10 de novembro de 12
  24. 24. <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/base" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>sábado, 10 de novembro de 12
  25. 25. sábado, 10 de novembro de 12
  26. 26. Será necessário um cara pra organizar nossa listasábado, 10 de novembro de 12
  27. 27. Será necessário um cara pra organizar nossa listasábado, 10 de novembro de 12
  28. 28. Adaptersábado, 10 de novembro de 12
  29. 29. sábado, 10 de novembro de 12
  30. 30. Extender de BaseAdaptersábado, 10 de novembro de 12
  31. 31. Vamos ver como ficasábado, 10 de novembro de 12
  32. 32. public class ClienteAdapter extends BaseAdapter { private List<Cliente> clientes; private LayoutInflater mInflater; private ViewHolder holder; static class ViewHolder{ private TextView txtNome; private TextView txtDataNascimento; } public ClienteAdapter(Context context, List<Cliente> cliente) { mInflater = LayoutInflater.from(context); this.clientes = cliente; } @Override public int getCount() { return clientes.size(); } @Override public Object getItem(int index) { return clientes.get(index); } @Override public long getItemId(int index) { return index; }sábado, 10 de novembro de 12
  33. 33. ViewHolder & LayoutInflatesábado, 10 de novembro de 12
  34. 34. @Override public View getView(int posicao, View convertView, ViewGroup arg2) { if (convertView == null) { convertView = mInflater.inflate(R.layout.cliente_list, null); holder = new ViewHolder(); holder.txtNome = (TextView) convertView.findViewById(R.id.txtNome); holder.txtDataNascimento = (TextView) convertView .findViewById(R.id.txtDataNascimento); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Cliente cliente = clientes.get(posicao); holder.txtNome.setText(cliente.getNome()); holder.txtDataNascimento.setText(cliente.getDataNascimento().toGMTString()); return convertView; }}sábado, 10 de novembro de 12
  35. 35. ListActivitysábado, 10 de novembro de 12
  36. 36. public class MainActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); List<Cliente> clientes = new ArrayList<Cliente>(); clientes.add(new Cliente("Fulaninha", new Date(1999, 3, 12))); clientes.add(new Cliente("Sicrano", new Date(1980, 4, 2))); clientes.add(new Cliente("Beltrano", new Date(1989, 6, 20))); clientes.add(new Cliente("Fulaninha", new Date(1999, 3, 12))); clientes.add(new Cliente("Sicrano", new Date(1980, 4, 2))); clientes.add(new Cliente("Beltrano", new Date(1989, 6, 20))); clientes.add(new Cliente("Fulaninha", new Date(1999, 3, 12))); clientes.add(new Cliente("Sicrano", new Date(1980, 4, 2))); clientes.add(new Cliente("Beltrano", new Date(1989, 6, 20))); clientes.add(new Cliente("Fulaninha", new Date(1999, 3, 12))); clientes.add(new Cliente("Sicrano", new Date(1980, 4, 2))); clientes.add(new Cliente("Beltrano", new Date(1989, 6, 20))); setListAdapter(new ClienteAdapter(this, clientes)); }}sábado, 10 de novembro de 12
  37. 37. sábado, 10 de novembro de 12
  38. 38. Data feia :(sábado, 10 de novembro de 12
  39. 39. Vamos deixa-la bonita, então :)sábado, 10 de novembro de 12
  40. 40. Vamos lá no nosso Adaptersábado, 10 de novembro de 12
  41. 41. Vamos mexer aqui holder.txtDataNascimento.setText(cliente.getDataNascimento().toGMTString());sábado, 10 de novembro de 12
  42. 42. Ficando assim: SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); String dataFormatada = simpleDateFormat.format(cliente.getDataNascimento()); holder.txtDataNascimento.setText(dataFormatada);sábado, 10 de novembro de 12
  43. 43. sábado, 10 de novembro de 12
  44. 44. Exercício • Criar 1 classe • Fazer tela de lista para esta classe criadasábado, 10 de novembro de 12
  45. 45. Relembrando...sábado, 10 de novembro de 12
  46. 46. DatabaseHelpersábado, 10 de novembro de 12
  47. 47. Ajudantesábado, 10 de novembro de 12
  48. 48. DAO Data Access Objectsábado, 10 de novembro de 12
  49. 49. Persistindo um objeto dao.create(objeto);sábado, 10 de novembro de 12
  50. 50. Buscando todos os objetos dao.queryForAll()sábado, 10 de novembro de 12
  51. 51. Buscando por id dao.queryForId(id)sábado, 10 de novembro de 12
  52. 52. Buscando por qualquer campo dao.queryForEq(fieldName, value)sábado, 10 de novembro de 12
  53. 53. Relacionamentosábado, 10 de novembro de 12
  54. 54. Vamos imaginar...sábado, 10 de novembro de 12
  55. 55. Produto Tem Categoriasábado, 10 de novembro de 12
  56. 56. Vamos precisar de 4 classes 2 Classes modelo 2 classes DAOsábado, 10 de novembro de 12
  57. 57. Modelos e DAOssábado, 10 de novembro de 12
  58. 58. Categoria @DatabaseTable public class Categoria { @DatabaseField(generatedId=true) private Integer id; @DatabaseField private String descricao;sábado, 10 de novembro de 12
  59. 59. Categoria DAO public class CategoriaDao extends BaseDaoImpl<Categoria, Integer>{ public CategoriaDao(ConnectionSource connectionSource) throws SQLException { super(connectionSource, Categoria.class); }sábado, 10 de novembro de 12
  60. 60. Produto @DatabaseTable public class Produto { @DatabaseField(generatedId=true) private Integer id; @DatabaseField private String nome; @DatabaseField(canBeNull = false, foreign = true) private Categoria categoria;sábado, 10 de novembro de 12
  61. 61. Produto DAO public class CategoriaDao extends BaseDaoImpl<Categoria, Integer>{ public CategoriaDao(ConnectionSource connectionSource) throws SQLException { super(connectionSource, Categoria.class); }sábado, 10 de novembro de 12
  62. 62. Exemplo DatabaseHelper helper = new DatabaseHelper(this); try { CategoriaDao categoriaDao = new CategoriaDao(helper.getConnectionSource()); ProdutoDao produtoDao = new ProdutoDao(helper.getConnectionSource()); Categoria categoriaComida = new Categoria("Comida"); categoriaDao.create(categoriaComida); Produto produtoSushi = new Produto("Sushi", categoriaComida); produtoDao.create(produtoSushi); Produto produtoPersistido = produtoDao.queryForAll().get(0); System.out.println("Produto: " + produtoPersistido.getNome()); System.out.println("Categoria: "+produtoPersistido.getCategoria().getDescricao()); System.out.println("CategoriaId: "+produtoPersistido.getCategoria().getId());sábado, 10 de novembro de 12
  63. 63. Vamos ver a saídasábado, 10 de novembro de 12
  64. 64. Output I/System.out(21923): Produto: Sushi I/System.out(21923): Categoria: null I/System.out(21923): CategoriaId: 1sábado, 10 de novembro de 12
  65. 65. Exemplo DatabaseHelper helper = new DatabaseHelper(this); try { CategoriaDao categoriaDao = new CategoriaDao(helper.getConnectionSource()); ProdutoDao produtoDao = new ProdutoDao(helper.getConnectionSource()); Categoria categoriaComida = new Categoria("Comida"); categoriaDao.create(categoriaComida); Produto produtoSushi = new Produto("Sushi", categoriaComida); produtoDao.create(produtoSushi); Produto produtoPersistido = produtoDao.queryForAll().get(0); System.out.println("Produto: " + produtoPersistido.getNome()); System.out.println("Categoria: "+produtoPersistido.getCategoria().getDescricao()); System.out.println("CategoriaId: "+produtoPersistido.getCategoria().getId()); categoriaDao.refresh(produtoPersistido.getCategoria()); System.out.println("Refresh"); System.out.println("Produto: " + produtoPersistido.getNome()); System.out.println("Categoria: "+produtoPersistido.getCategoria().getDescricao()); System.out.println("CategoriaId: "+produtoPersistido.getCategoria().getId());sábado, 10 de novembro de 12
  66. 66. Vamos ver a saídasábado, 10 de novembro de 12
  67. 67. Output I/System.out(21923): Produto: Sushi I/System.out(21923): Categoria: null I/System.out(21923): CategoriaId: 1 I/System.out(21923): Refresh I/System.out(21923): Produto: Sushi I/System.out(21923): Categoria: Comidasábado, 10 de novembro de 12
  68. 68. Exercício Faça um relacionamento. Crie 2 classes models e 2 classes DAOs. Persista os dados e consulte-as imprimindo no log.sábado, 10 de novembro de 12
  69. 69. Exercício Quando finalizar, ao invés de mostrar os dados persistidos no log, faça duas listas. Uma para cada modelo criado.sábado, 10 de novembro de 12
  70. 70. Câmerasábado, 10 de novembro de 12
  71. 71. Intent android.media.action.IMAGE_CAPTUREsábado, 10 de novembro de 12
  72. 72. Permissão <uses-permission android:name="android.permission.CAMERA" />sábado, 10 de novembro de 12
  73. 73. ExemploIntent intent = new Intent("android.media.action.IMAGE_CAPTURE");startActivity(intent);sábado, 10 de novembro de 12
  74. 74. Lembrando...sábado, 10 de novembro de 12
  75. 75. Exemplo <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/botao" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chamar Camera" /> </RelativeLayout>sábado, 10 de novembro de 12
  76. 76. public class MainActivity extends Activity implements OnClickListener { private Button botao; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); botao = (Button) findViewById(R.id.botao); botao.setOnClickListener(this); } @Override public void onClick(View v) { Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivity(intent); } }sábado, 10 de novembro de 12
  77. 77. sábado, 10 de novembro de 12
  78. 78. sábado, 10 de novembro de 12
  79. 79. Vamos fazer o seguinte...sábado, 10 de novembro de 12
  80. 80. Ao tirar foto, vamos exibi-la em um ImageViewsábado, 10 de novembro de 12
  81. 81. Como?sábado, 10 de novembro de 12
  82. 82. startActivityForResult onActivityResultsábado, 10 de novembro de 12
  83. 83. <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/botao" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chamar Camera" /> <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent"/></LinearLayout>sábado, 10 de novembro de 12
  84. 84. Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent, 19);sábado, 10 de novembro de 12
  85. 85. onActivityResult Recebesábado, 10 de novembro de 12
  86. 86. protected void onActivityResult(int requestCode, intresultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 19) { Bundle bundle = data.getExtras(); if (bundle != null) { Bitmap bitmap = (Bitmap) bundle.get("data"); image.setImageBitmap(bitmap); } } }sábado, 10 de novembro de 12
  87. 87. sábado, 10 de novembro de 12
  88. 88. Foi salvo uma foto na galeria de fotos do android.sábado, 10 de novembro de 12
  89. 89. É possível definir um local para a imagem irsábado, 10 de novembro de 12
  90. 90. Utilizando o putExtra na intent.sábado, 10 de novembro de 12
  91. 91. Utilizando o putExtra na intent. Lembra dele?sábado, 10 de novembro de 12
  92. 92. Através do putExtra podemos passar o local desejadosábado, 10 de novembro de 12
  93. 93. Vamos lá!sábado, 10 de novembro de 12
  94. 94. Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File photo = new File(Environment.getExternalStorageDirectory(), "fotxinha.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); imageUri = Uri.fromFile(photo); startActivityForResult(intent, 19); startActivity(intent);sábado, 10 de novembro de 12
  95. 95. Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File photo = new File(Environment.getExternalStorageDirectory(), "fotxinha.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); imageUri = Uri.fromFile(photo); startActivityForResult(intent, 19); startActivity(intent);sábado, 10 de novembro de 12
  96. 96. Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File photo = new File(Environment.getExternalStorageDirectory(), "fotxinha.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); imageUri = Uri.fromFile(photo); startActivityForResult(intent, 19); startActivity(intent);sábado, 10 de novembro de 12
  97. 97. URIhttp://developer.android.com/reference/android/net/Uri.html http://www.faqs.org/rfcs/rfc2396.htmlsábado, 10 de novembro de 12
  98. 98. @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 19) { Uri selectedImage = imageUri; getContentResolver().notifyChange(selectedImage, null); ImageView imageView = (ImageView) findViewById(R.id.image); ContentResolver cr = getContentResolver(); Bitmap bitmap; try { bitmap = android.provider.MediaStore.Images.Media .getBitmap(cr, selectedImage); imageView.setImageBitmap(bitmap); Toast.makeText(this, selectedImage.toString(), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(this, "Falha", Toast.LENGTH_SHORT).show(); Log.e("Camera", e.toString()); } } }sábado, 10 de novembro de 12
  99. 99. Exercicio Fazer a aplicação tirar uma foto, salvar no lugar desejado e exibi-la em um imageViewsábado, 10 de novembro de 12
  100. 100. Próxima aula Jackson Testes automatizados (Unitários e funcionais)sábado, 10 de novembro de 12

×