sábado, 10 de novembro de 12
Desenvolvedor de software
                                  www.carloscavalcanti.com
                                contato@carloscavalcanti.com
                                    twitter @carloscaval
                                 github.com/carloscavalcanti
                                slideshare.net/carloscavalcanti




sá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âmera




sábado, 10 de novembro de 12
sábado, 10 de novembro de 12
Criando uma lista
                                    simples


sá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 Adapter



sábado, 10 de novembro de 12
Exemplo
public 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ção




sá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 complexa



sábado, 10 de novembro de 12
Vamos imaginar
        uma classe
         Cliente.
     E vamos exibir
       uma lista de
         clientes
sábado, 10 de novembro de 12
Classe Cliente

      public class Cliente {
      	
      	 private String nome;
      	 private Date dataNascimento;




sábado, 10 de novembro de 12
Layout



sá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
                      listagem



sá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 lista




sá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 lista




sábado, 10 de novembro de 12
Será necessário um cara
             pra organizar nossa lista




sábado, 10 de novembro de 12
Adapter



sábado, 10 de novembro de 12
sábado, 10 de novembro de 12
Extender de
                               BaseAdapter




sábado, 10 de novembro de 12
Vamos ver como fica



sá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
                                    &
                               LayoutInflate


sá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
ListActivity




sá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
                            Adapter




sá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 criada



sábado, 10 de novembro de 12
Relembrando...
sábado, 10 de novembro de 12
DatabaseHelper



sábado, 10 de novembro de 12
Ajudante



sábado, 10 de novembro de 12
DAO
                               Data Access Object




sá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
Relacionamento




sábado, 10 de novembro de 12
Vamos imaginar...




sábado, 10 de novembro de 12
Produto
                               Tem




                               Categoria

sábado, 10 de novembro de 12
Vamos precisar de 4
                          classes
                               2 Classes modelo
                                2 classes DAO




sábado, 10 de novembro de 12
Modelos e DAOs




sá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ída




sá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




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());
    	     	   	
    	     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ída




sá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: Comida




sá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âmera




sábado, 10 de novembro de 12
Intent

                               android.media.action.IMAGE_CAPTURE




sábado, 10 de novembro de 12
Permissão
        <uses-permission android:name="android.permission.CAMERA" />




sábado, 10 de novembro de 12
Exemplo


Intent 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
                                   ImageView

sábado, 10 de novembro de 12
Como?

sábado, 10 de novembro de 12
startActivityForResult

                         onActivityResult
sá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




                               Recebe


sábado, 10 de novembro de 12
protected void onActivityResult(int requestCode, int
resultCode, 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 ir




sá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
                  desejado


sá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
URI
http://developer.android.com/reference/android/net/Uri.html

                        http://www.faqs.org/rfcs/rfc2396.html




sá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 imageView




sábado, 10 de novembro de 12
Próxima aula
                                        Jackson
                      Testes automatizados (Unitários e funcionais)




sábado, 10 de novembro de 12

Aula android 04

  • 1.
    sábado, 10 denovembro de 12
  • 2.
    Desenvolvedor de software www.carloscavalcanti.com contato@carloscavalcanti.com twitter @carloscaval github.com/carloscavalcanti slideshare.net/carloscavalcanti sábado, 10 de novembro de 12
  • 3.
    sábado, 10 denovembro de 12
  • 4.
    sábado, 10 denovembro de 12
  • 5.
    Desenvolvedor de 17anos 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.
    Listagem ORMLite Câmera sábado, 10 de novembro de 12
  • 7.
    sábado, 10 denovembro de 12
  • 8.
    Criando uma lista simples sábado, 10 de novembro de 12
  • 9.
    O que énecessário? sábado, 10 de novembro de 12
  • 10.
    O que énecessário? Classe ListActivity Arquivo XML para exibir conteúdo da linha Objeto Adapter sábado, 10 de novembro de 12
  • 11.
    Exemplo public class MainActivityextends 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.
    Ao clicar emum item fazer alguma ação sábado, 10 de novembro de 12
  • 13.
    Evento click ListViewlistView = 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.
    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.
    sábado, 10 denovembro de 12
  • 16.
  • 17.
    Vamos imaginar uma classe Cliente. E vamos exibir uma lista de clientes sábado, 10 de novembro de 12
  • 18.
    Classe Cliente public class Cliente { private String nome; private Date dataNascimento; sábado, 10 de novembro de 12
  • 19.
    Layout sábado, 10 denovembro de 12
  • 20.
    Como eu queroexibir os dados? sábado, 10 de novembro de 12
  • 21.
    Precisamos criar um layout para representar uma linha da nossa listagem sábado, 10 de novembro de 12
  • 22.
    <?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns: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.
    E agora precisamosde uma lista sábado, 10 de novembro de 12
  • 24.
    <?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns: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.
    sábado, 10 denovembro de 12
  • 26.
    Será necessário umcara pra organizar nossa lista sábado, 10 de novembro de 12
  • 27.
    Será necessário umcara pra organizar nossa lista sábado, 10 de novembro de 12
  • 28.
    Adapter sábado, 10 denovembro de 12
  • 29.
    sábado, 10 denovembro de 12
  • 30.
    Extender de BaseAdapter sábado, 10 de novembro de 12
  • 31.
    Vamos ver comofica sábado, 10 de novembro de 12
  • 32.
    public class ClienteAdapterextends 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.
    ViewHolder & LayoutInflate sábado, 10 de novembro de 12
  • 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.
  • 36.
    public class MainActivityextends 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.
    sábado, 10 denovembro de 12
  • 38.
    Data feia :( sábado,10 de novembro de 12
  • 39.
    Vamos deixa-la bonita, então :) sábado, 10 de novembro de 12
  • 40.
    Vamos lá nonosso Adapter sábado, 10 de novembro de 12
  • 41.
    Vamos mexer aqui holder.txtDataNascimento.setText(cliente.getDataNascimento().toGMTString()); sábado, 10 de novembro de 12
  • 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.
    sábado, 10 denovembro de 12
  • 44.
    Exercício • Criar 1 classe • Fazer tela de lista para esta classe criada sábado, 10 de novembro de 12
  • 45.
  • 46.
  • 47.
  • 48.
    DAO Data Access Object sábado, 10 de novembro de 12
  • 49.
    Persistindo um objeto dao.create(objeto); sábado, 10 de novembro de 12
  • 50.
    Buscando todos os objetos dao.queryForAll() sábado, 10 de novembro de 12
  • 51.
    Buscando por id dao.queryForId(id) sábado, 10 de novembro de 12
  • 52.
    Buscando por qualquer campo dao.queryForEq(fieldName, value) sábado, 10 de novembro de 12
  • 53.
  • 54.
  • 55.
    Produto Tem Categoria sábado, 10 de novembro de 12
  • 56.
    Vamos precisar de4 classes 2 Classes modelo 2 classes DAO sábado, 10 de novembro de 12
  • 57.
    Modelos e DAOs sábado,10 de novembro de 12
  • 58.
    Categoria @DatabaseTable public class Categoria { @DatabaseField(generatedId=true) private Integer id; @DatabaseField private String descricao; sábado, 10 de novembro de 12
  • 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.
    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.
    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.
    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.
    Vamos ver asaída sábado, 10 de novembro de 12
  • 64.
    Output I/System.out(21923): Produto: Sushi I/System.out(21923): Categoria: null I/System.out(21923): CategoriaId: 1 sábado, 10 de novembro de 12
  • 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.
    Vamos ver asaída sábado, 10 de novembro de 12
  • 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: Comida sábado, 10 de novembro de 12
  • 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.
    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.
    Câmera sábado, 10 denovembro de 12
  • 71.
    Intent android.media.action.IMAGE_CAPTURE sábado, 10 de novembro de 12
  • 72.
    Permissão <uses-permission android:name="android.permission.CAMERA" /> sábado, 10 de novembro de 12
  • 73.
    Exemplo Intent intent =new Intent("android.media.action.IMAGE_CAPTURE"); startActivity(intent); sábado, 10 de novembro de 12
  • 74.
  • 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.
    public class MainActivityextends 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.
    sábado, 10 denovembro de 12
  • 78.
    sábado, 10 denovembro de 12
  • 79.
    Vamos fazer o seguinte... sábado, 10 de novembro de 12
  • 80.
    Ao tirar foto,vamos exibi-la em um ImageView sábado, 10 de novembro de 12
  • 81.
    Como? sábado, 10 denovembro de 12
  • 82.
    startActivityForResult onActivityResult sábado, 10 de novembro de 12
  • 83.
    <?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns: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.
    Intent intent =new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent, 19); sábado, 10 de novembro de 12
  • 85.
    onActivityResult Recebe sábado, 10 de novembro de 12
  • 86.
    protected void onActivityResult(intrequestCode, int resultCode, 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.
    sábado, 10 denovembro de 12
  • 88.
    Foi salvo umafoto na galeria de fotos do android. sábado, 10 de novembro de 12
  • 89.
    É possível definirum local para a imagem ir sábado, 10 de novembro de 12
  • 90.
    Utilizando o putExtrana intent. sábado, 10 de novembro de 12
  • 91.
    Utilizando o putExtrana intent. Lembra dele? sábado, 10 de novembro de 12
  • 92.
    Através do putExtra podemos passar o local desejado sábado, 10 de novembro de 12
  • 93.
    Vamos lá! sábado, 10de novembro de 12
  • 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.
    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.
    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.
    URI http://developer.android.com/reference/android/net/Uri.html http://www.faqs.org/rfcs/rfc2396.html sábado, 10 de novembro de 12
  • 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.
    Exercicio Fazer a aplicação tirar uma foto, salvar no lugar desejado e exibi-la em um imageView sábado, 10 de novembro de 12
  • 100.
    Próxima aula Jackson Testes automatizados (Unitários e funcionais) sábado, 10 de novembro de 12