Jogo da Forca Tutorial Pong Tutorial SQLite
Mostrando postagens com marcador agenda. Mostrar todas as postagens

Tutorial SQLite #3 - Tela de Listagem

Boa noite!

Dando continuidade na série, hoje vamos alterar a tela inicial do nosso programa, colocando uma listagem dos contatos. Vamos criar a tela que possuirá a listagem dos contatos, activity_listagem.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_vertical_margin" >
    <Button
        android:id="@+id/btCadastro"
        android:text="Cadastros"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/btCadastro" />
</RelativeLayout>

E vamos também criar um outro xml que servirá para sobrescrever as linhas da listagem que criamos, o xml linha_contato.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="7dp" >
    <TextView
        android:id="@+id/tvTelefone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Telefone"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true" />
    <TextView
        android:id="@+id/tvNome"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:text="Nome Contato"
        android:layout_toLeftOf="@id/tvTelefone"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true" />
    <TextView
        android:id="@+id/tvEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="italic"
        android:text="email@contato.com.br"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/tvNome"
        android:layout_toLeftOf="@id/tvTelefone" />
</RelativeLayout>

Agora vamos criar uma nova classe chamada CadastroActivity e passar tudo o que tem na classe MainActivity para dar lugar a nossa listagem, que passará a ser a tela principal da nossa aplicação.
public class MainActivity extends ListActivity {

    private ContatoDAO contatoDAO;
    List contatos;
    ContatoAdapter adapter;
    BaseDAO baseDAO;
    int posicao = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listagem);
        baseDAO = new BaseDAO(this);

        Button btCadastro = (Button) findViewById(R.id.btCadastro);
        btCadastro.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, CadastroActivity.class));
            }
        });
    }

    @Override
    protected void onResume() {
        contatoDAO = new ContatoDAO(this);
        contatoDAO.open();
        contatos = contatoDAO.lerContatos();

        adapter = new ContatoAdapter(this, contatos);
        setListAdapter(adapter);

        super.onResume();
    }

}

Bom, como vocês puderam ver, instanciei uma classe chamada ContatoAdapter, que serve para criar cada uma das linhas da listagem, e agora vamos criar esta classe (dentro da mesma pasta da classe ContatoDAO):
public class ContatoAdapter extends BaseAdapter {

    private Context context;

    private List contatos;
    private LayoutInflater inflater;

    public ContatoAdapter(Context context, List contatos) {
        super();
        this.context = context;
        this.contatos = contatos;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public void notifyDataSetChanged() {
        try {
            super.notifyDataSetChanged();
        } catch (Exception e) {
            trace("Erro: " + e.getMessage());
        }
    }

    private void trace(String msg) {
        toast(msg);
    }

    public void toast(String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }
   
    public int getCount() {
        return contatos.size();
    }

    public void remove(final Contato contato) {
        this.contatos.remove(contato);
    }

    public void add(final Contato contato) {
        this.contatos.add(contato);
    }

    public Object getItem(int position) {
        return contatos.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup viewGroup2) {
        try {
            Contato contato = contatos.get(position);

            ViewHolder holder;

            if (convertView == null) {
                convertView = inflater.inflate(layout.linha_contato, null);

                holder = new ViewHolder();
                holder.tvNome = (TextView) convertView.findViewById(id.tvNome
);
                holder.tvTelefone = (TextView) convertView.findViewById(id.tvTelefone);
                holder.tvEmail = (TextView) convertView.findViewById(id.tvEmail);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.tvNome.setText(contato.getNome());
            holder.tvTelefone.setText(contato.getTelefone());
            holder.tvEmail.setText(contato.getEmail());

            return convertView;
        } catch (Exception e) {
            trace("Erro: " + e.getMessage());
        }

        return convertView;
    }

    static class ViewHolder {
        public TextView tvNome;
        public TextView tvTelefone;
        public TextView tvEmail;
    }

}

Bom, faltou apenas declarar a nova classe, (CadastroActivity), e tudo ok.
Qualquer dúvida, clique aqui para baixar o tutorial. Até a próxima postagem!!

Tutorial SQLite #2 - Criação do Banco de Dados

Boa noite amigos!

Hoje vamos montar a estrutura do banco de dados.
Primeiramente vamos criar o pacote br.com.blogspot.androidandrekunde.dao.banco onde a classe contendo o banco ficará.
E dentro dela criamos o arquivo BaseDAO:
package br.com.blogspot.androidandrekunde.dao.banco;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class BaseDAO extends SQLiteOpenHelper {

    //Nome do banco de dados
    public static final String NOME_BANCO = "exemplosqlite";
    //Versão do banco de dados
    public static final int VERSAO_SCHEMA = 1;

    //Nome da tabela
    public static final String TABELA_CONTATO = "contato";

    //Nome dos campos
    public static final String CAMPO_ID = "_id";
    public static final String CAMPO_NOME = "nome";
    public static final String CAMPO_TELEFONE = "telefone";
    public static final String CAMPO_EMAIL = "email";

    private static final String CRIAR_TABELA_CADASTRO = "CREATE TABLE "
            + TABELA_CONTATO + " (" + CAMPO_ID + " INTEGER PRIMARY KEY, "
            + CAMPO_NOME + " TEXT, "
            + CAMPO_TELEFONE + " TEXT, "
            + CAMPO_EMAIL + " TEXT)";

    public BaseDAO(Context context) {
        super(context, NOME_BANCO, null, VERSAO_SCHEMA);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CRIAR_TABELA_CADASTRO);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

}

Essa classe será a responsável por criar e atualizar o banco de dados.
Agora criaremos a classe de modelagem de dados, Contato:
package br.com.blogspot.androidandrekunde.model;

import java.io.Serializable;

public class Contato implements Serializable {

    private static final long serialVersionUID = 1L;
    private long id;
    private String nome;
    private String telefone;
    private String email;

    public Contato() {
    }

    public Contato(String nome, String telefone, String email) {
        this.nome = nome;
        this.telefone = telefone;
        this.email = email;
    }

    public Contato(long id, String nome, String telefone, String email) {
        this.id = id;
        this.nome = nome;
        this.telefone = telefone;
        this.email = email;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}

Precisamos criar também uma classe para realizar a conexão com o banco de dados, chamada ContatoDAO:
package br.com.blogspot.androidandrekunde.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import br.com.blogspot.androidandrekunde.dao.banco.BaseDAO;
import br.com.blogspot.androidandrekunde.model.Contato;

public class ContatoDAO {

    private SQLiteDatabase database;
    private BaseDAO baseDAO;

    public ContatoDAO(Context context) {
        baseDAO = new BaseDAO(context);
    }

    public void open() throws SQLException {
        database = baseDAO.getWritableDatabase();
    }

    public void close() {
        baseDAO.close();
    }

    public long novoContato(Contato contato) {
        ContentValues values = new ContentValues();

        values.put(BaseDAO.CAMPO_NOME, contato.getNome());
        values.put(BaseDAO.CAMPO_TELEFONE, contato.getTelefone());
        values.put(BaseDAO.CAMPO_EMAIL, contato.getEmail());

        return database.insert(BaseDAO.TABELA_CONTATO, null, values);
    }

    public List lerContatos() {
        Cursor c = database.rawQuery("SELECT * FROM " + BaseDAO.TABELA_CONTATO, null);
        List contatos = new ArrayList();
        if (c.moveToFirst()) {
            while (!c.isAfterLast()) {
                Contato contato = new Contato(
                        c.getLong(c.getColumnIndex(BaseDAO.CAMPO_ID)),
                        c.getString(c.getColumnIndex(BaseDAO.CAMPO_NOME)),
                        c.getString(c.getColumnIndex(BaseDAO.CAMPO_TELEFONE)),
                        c.getString(c.getColumnIndex(BaseDAO.CAMPO_EMAIL)));
                contatos.add(contato);
                c.moveToNext();
            }
        }
        c.close();

        return contatos;
    }

    public int atualizarContato(Contato contato) {
        long id = contato.getId();
        ContentValues values = new ContentValues();

        values.put(BaseDAO.CAMPO_NOME, contato.getNome());
        values.put(BaseDAO.CAMPO_TELEFONE, contato.getTelefone());
        values.put(BaseDAO.CAMPO_EMAIL, contato.getEmail());

        return database.update(BaseDAO.TABELA_CONTATO, values, BaseDAO.CAMPO_ID + " = " + id, null);
    }

    public void apagarContato(Contato contato) {
        long id = contato.getId();

        database.delete(BaseDAO.TABELA_CONTATO, BaseDAO.CAMPO_ID + " = " + id, null);
    }

}

Feito isso, vamos atualizar a classe Main, que ficará assim:
package br.com.blogspot.androidandrekunde.tutorialsqlite;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import br.com.blogspot.androidandrekunde.dao.ContatoDAO;
import br.com.blogspot.androidandrekunde.model.Contato;

public class MainActivity extends Activity {

    EditText etNome;
    EditText etTelefone;
    EditText etEmail;

    ContatoDAO contatoDAO;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        contatoDAO = new ContatoDAO(this);

        etNome = (EditText) findViewById(R.id.etNome);
        etTelefone = (EditText) findViewById(R.id.etTelefone);
        etEmail = (EditText) findViewById(R.id.etEmail);

        Button btCancelar = (Button) findViewById(R.id.btCancelar);
        Button btSalvar = (Button) findViewById(R.id.btSalvar);

        btCancelar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                limparTela();
            }
        });

        btSalvar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Variáveis
                String nome = "";
                String telefone = "";
                String email = "";

                nome = etNome.getText().toString();
                telefone = etTelefone.getText().toString();
                email = etEmail.getText().toString();

                //Cria o contato
                Contato contato = new Contato(nome, telefone, email);

                //Abre a conexão com o banco de dados
                contatoDAO.open();

                //Salva o contato
                contatoDAO.novoContato(contato);

                //Fecha a conexão com o banco de dados
                contatoDAO.close();

                limparTela();
            }
        });
    }

    private void limparTela() {
         etNome.setText("");
         etTelefone.setText("");
         etEmail.setText("");
    }

}
Bom, com isso, o cadastro do contato já está sendo feito. No próximo post faremos a listagem dos contatos cadastrados.
Clique aqui, para baixar este tutorial.

Tutorial SQLite #1 - Tela de Cadastro

Boa noite amigos!

Vamos começar mais esta série de tutoriais. Desta vez vou mostrar como utilizar o banco de dados do Android, o SQLite.
Não é muito diferente dos demais bancos de dados existentes, e como os demais, também tem sua peculiaridades. De princípio, vamos criar o banco de dados pelo nosso aplicativo mesmo, sem a necessidade de um programa para isso.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:background="#DDDDDD"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignparentbottom="true"
        android:padding="@dimen/activity_vertical_margin" >
        <Button
            android:id="@+id/btCancelar"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:text="Cancelar" />
        <Button
            android:id="@+id/btSalvar"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:text="Salvar" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/activity_vertical_margin"
        android:layout_above="@id/linearLayout1"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Nome" />
        <EditText
            android:id="@+id/etNome"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textCapWords" />
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:text="Telefone" />
        <EditText
            android:id="@+id/etTelefone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="phone" />
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:text="E-mail" />
        <EditText
            android:id="@+id/etEmail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress" />
    </LinearLayout>
</RelativeLayout>

Bom, vamos começar com uma tela simples, apenas para fazer um cadastro, como se fosse para uma agenda de contatos, no nosso arquivo main.xml.
Agora vamos para a nossa activity:
package br.com.blogspot.androidandrekunde.tutorialsqlite;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    EditText etNome;
    EditText etTelefone;
    EditText etEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etNome = (EditText) findViewById(R.id.etNome);
        etTelefone = (EditText) findViewById(R.id.etTelefone);
        etEmail = (EditText) findViewById(R.id.etEmail);

        Button btCancelar = (Button) findViewById(R.id.btCancelar);
        Button btSalvar = (Button) findViewById(R.id.btSalvar);

        btCancelar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Toast.makeText(getApplicationContext(), "Click cancelar", Toast.LENGTH_SHORT).show();
            }
        });

        btSalvar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "Click salvar", Toast.LENGTH_SHORT).show();
            }
        });
    }

}

Por enquanto é isso, mas é somente o começo, no próximo post começaremos a estruturação do banco de dados.
Até o próximo post!!
Copyright © 2013 Aprendendo Android and Blogger Themes.