Aula android 04
Upcoming SlideShare
Loading in...5
×
 

Aula android 04

on

  • 1,104 views

Quarta aula de Android.

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

Statistics

Views

Total Views
1,104
Views on SlideShare
1,102
Embed Views
2

Actions

Likes
0
Downloads
49
Comments
0

1 Embed 2

http://www.verious.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Aula android 04 Aula android 04 Presentation Transcript

    • sábado, 10 de novembro de 12
    • Desenvolvedor de software www.carloscavalcanti.com contato@carloscavalcanti.com twitter @carloscaval github.com/carloscavalcanti slideshare.net/carloscavalcantisábado, 10 de novembro de 12
    • sábado, 10 de novembro de 12
    • sábado, 10 de novembro de 12
    • 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
    • Listagem ORMLite Câmerasábado, 10 de novembro de 12
    • sábado, 10 de novembro de 12
    • Criando uma lista simplessábado, 10 de novembro de 12
    • O que é necessário?sábado, 10 de novembro de 12
    • O que é necessário? Classe ListActivity Arquivo XML para exibir conteúdo da linha Objeto Adaptersábado, 10 de novembro de 12
    • 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
    • Ao clicar em um item fazer alguma açãosábado, 10 de novembro de 12
    • 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
    • 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
    • sábado, 10 de novembro de 12
    • Listagem complexasábado, 10 de novembro de 12
    • Vamos imaginar uma classe Cliente. E vamos exibir uma lista de clientessábado, 10 de novembro de 12
    • Classe Cliente public class Cliente { private String nome; private Date dataNascimento;sábado, 10 de novembro de 12
    • Layoutsábado, 10 de novembro de 12
    • Como eu quero exibir os dados?sábado, 10 de novembro de 12
    • Precisamos criar um layout para representar uma linha da nossa listagemsábado, 10 de novembro de 12
    • <?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
    • E agora precisamos de uma listasábado, 10 de novembro de 12
    • <?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
    • sábado, 10 de novembro de 12
    • Será necessário um cara pra organizar nossa listasábado, 10 de novembro de 12
    • Será necessário um cara pra organizar nossa listasábado, 10 de novembro de 12
    • Adaptersábado, 10 de novembro de 12
    • sábado, 10 de novembro de 12
    • Extender de BaseAdaptersábado, 10 de novembro de 12
    • Vamos ver como ficasábado, 10 de novembro de 12
    • 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
    • ViewHolder & LayoutInflatesábado, 10 de novembro de 12
    • @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
    • ListActivitysábado, 10 de novembro de 12
    • 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
    • sábado, 10 de novembro de 12
    • Data feia :(sábado, 10 de novembro de 12
    • Vamos deixa-la bonita, então :)sábado, 10 de novembro de 12
    • Vamos lá no nosso Adaptersábado, 10 de novembro de 12
    • Vamos mexer aqui holder.txtDataNascimento.setText(cliente.getDataNascimento().toGMTString());sábado, 10 de novembro de 12
    • 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
    • sábado, 10 de novembro de 12
    • Exercício • Criar 1 classe • Fazer tela de lista para esta classe criadasábado, 10 de novembro de 12
    • Relembrando...sábado, 10 de novembro de 12
    • DatabaseHelpersábado, 10 de novembro de 12
    • Ajudantesábado, 10 de novembro de 12
    • DAO Data Access Objectsábado, 10 de novembro de 12
    • Persistindo um objeto dao.create(objeto);sábado, 10 de novembro de 12
    • Buscando todos os objetos dao.queryForAll()sábado, 10 de novembro de 12
    • Buscando por id dao.queryForId(id)sábado, 10 de novembro de 12
    • Buscando por qualquer campo dao.queryForEq(fieldName, value)sábado, 10 de novembro de 12
    • Relacionamentosábado, 10 de novembro de 12
    • Vamos imaginar...sábado, 10 de novembro de 12
    • Produto Tem Categoriasábado, 10 de novembro de 12
    • Vamos precisar de 4 classes 2 Classes modelo 2 classes DAOsábado, 10 de novembro de 12
    • Modelos e DAOssábado, 10 de novembro de 12
    • Categoria @DatabaseTable public class Categoria { @DatabaseField(generatedId=true) private Integer id; @DatabaseField private String descricao;sábado, 10 de novembro de 12
    • 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
    • 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
    • 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
    • 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
    • Vamos ver a saídasábado, 10 de novembro de 12
    • 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
    • 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
    • Vamos ver a saídasábado, 10 de novembro de 12
    • 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
    • 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
    • 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
    • Câmerasábado, 10 de novembro de 12
    • Intent android.media.action.IMAGE_CAPTUREsábado, 10 de novembro de 12
    • Permissão <uses-permission android:name="android.permission.CAMERA" />sábado, 10 de novembro de 12
    • ExemploIntent intent = new Intent("android.media.action.IMAGE_CAPTURE");startActivity(intent);sábado, 10 de novembro de 12
    • Lembrando...sábado, 10 de novembro de 12
    • 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
    • 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
    • sábado, 10 de novembro de 12
    • sábado, 10 de novembro de 12
    • Vamos fazer o seguinte...sábado, 10 de novembro de 12
    • Ao tirar foto, vamos exibi-la em um ImageViewsábado, 10 de novembro de 12
    • Como?sábado, 10 de novembro de 12
    • startActivityForResult onActivityResultsábado, 10 de novembro de 12
    • <?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
    • Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent, 19);sábado, 10 de novembro de 12
    • onActivityResult Recebesábado, 10 de novembro de 12
    • 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
    • sábado, 10 de novembro de 12
    • Foi salvo uma foto na galeria de fotos do android.sábado, 10 de novembro de 12
    • É possível definir um local para a imagem irsábado, 10 de novembro de 12
    • Utilizando o putExtra na intent.sábado, 10 de novembro de 12
    • Utilizando o putExtra na intent. Lembra dele?sábado, 10 de novembro de 12
    • Através do putExtra podemos passar o local desejadosábado, 10 de novembro de 12
    • Vamos lá!sábado, 10 de novembro de 12
    • 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
    • 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
    • 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
    • URIhttp://developer.android.com/reference/android/net/Uri.html http://www.faqs.org/rfcs/rfc2396.htmlsábado, 10 de novembro de 12
    • @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
    • Exercicio Fazer a aplicação tirar uma foto, salvar no lugar desejado e exibi-la em um imageViewsábado, 10 de novembro de 12
    • Próxima aula Jackson Testes automatizados (Unitários e funcionais)sábado, 10 de novembro de 12