Android - Carregando ListView com SqLite
Autor: Marcio de Souza | Publicado: 2012-04-21T15:59:00-07:00



Olá Pessoal,

Hoje vou mostrar como carregar um ListView com informações vindas do SqLite, esse exemplo utiliza parte do código utilizado no exemplo de&nbsp;Agenda.

A seguir temos um print do projeto, para orientar onde devemos criar cada arquivo.



Para facilitar no aprendizado todos os fontes apresentados seguem com comentários, e abaixo segue todo o fonte utilizado.

Arquivo main.xml
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" &gt;

    &lt;Button
        android:id="@+id/btnInserir"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Inserir registros" 
        android:onClick="btnInserir_Click"/&gt;

    &lt;Button
        android:id="@+id/btnCarregar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Carregar registros"
        android:onClick="btnCarregar_Click" /&gt;

    &lt;ListView
        android:id="@+id/listView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" &gt;
    &lt;/ListView&gt;

&lt;/LinearLayout&gt;



Arquivo row.xml
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;RelativeLayout 
 android:layout_width="fill_parent" 
 android:orientation="horizontal" 
 android:id="@+id/rowLayout" 
 android:layout_height="fill_parent" 
 xmlns:android="http://schemas.android.com/apk/res/android"&gt; 

    
 &lt;TextView 
     android:id="@+id/tvNome" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium"
     android:text="Nome" 
     android:layout_alignParentLeft="true"/&gt;

    &lt;TextView
        android:id="@+id/tvEndereco"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tvNome"
        android:gravity="right"
        android:text="Endereco" /&gt;

    &lt;TextView
        android:id="@+id/tvTelefone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tvEndereco"
        android:text="Telefone"
        /&gt;

&lt;/RelativeLayout&gt;



Arquivo BaseDAO.java
package br.com.EscolaDeAndroid.ListSqlite;

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

//Classe responsável pela criação do Banco de Dados e tabelas
public class BaseDAO extends SQLiteOpenHelper {

    public static final String TBL_AGENDA = "agenda";
    public static final String AGENDA_ID = "_id";
    public static final String AGENDA_NOME = "nome";
    public static final String AGENDA_ENDERECO = "endereco";
    public static final String AGENDA_TELEFONE = "telefone";
    
    private static final String DATABASE_NAME = "agenda.db";
    private static final int DATABASE_VERSION = 1;
    
      //Estrutura da tabela Agenda (sql statement)
    private static final String CREATE_AGENDA = "create table " +
            TBL_AGENDA + "( " + AGENDA_ID       + " integer primary key autoincrement, " + 
                                  AGENDA_NOME     + " text not null, " +
                                  AGENDA_ENDERECO + " text not null, " +
                                  AGENDA_TELEFONE + " text not null);";

    public BaseDAO(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        //Criação da tabela
        database.execSQL(CREATE_AGENDA);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //Caso seja necessário mudar a estrutura da tabela
        //deverá primeiro excluir a tabela e depois recriá-la
        db.execSQL("DROP TABLE IF EXISTS " + TBL_AGENDA);
        onCreate(db);
    }
}



Arquivo ListSqliteActivity.java
package br.com.EscolaDeAndroid.ListSqlite;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class ListSqliteActivity extends Activity {
    private SQLiteDatabase database;
    private CursorAdapter dataSource;
    
    //Atenção: é necessário inserir o PK (chave primária _id) como último campo
    private static final String campos[] = {"nome", "endereco", "telefone", "_id"};

    ListView listView;
    BaseDAO helper;
    
    /** Chamado quando a Activity é exeutada pela primeira vez. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        listView = (ListView) findViewById(R.id.listView1);
       
        //cria instância da classe BaseDAO, responsável pela criação do Banco de Dados 
        helper = new BaseDAO(this);
        
        //executa rotinas internas para abrir/utilizar o banco de dados
        database = helper.getWritableDatabase();
    }
    
    public void btnInserir_Click(View v){
        //insere dados no banco de dados
        database.execSQL("INSERT INTO agenda (nome, endereco, telefone) VALUES " +
                "('Escola de Android', 'R: João Figueiredo, 101', '(99)9999-9999')");
        
        database.execSQL("INSERT INTO agenda (nome, endereco, telefone) VALUES " +
                "('Projeto Teste', 'Av. Brasil, 500', '(12)3456-78901')");        
        
        Toast.makeText(this, "Registros inseridos com sucesso", Toast.LENGTH_SHORT).show();        
    }
    
    public void btnCarregar_Click(View v){
        //executa consulta geral de todos os registros cadastrados no banco de dados
        Cursor contatos = database.query("agenda", campos, null, null, null, null, null);

        if (contatos.getCount() &gt; 0){
            //cria cursor que será exibido na tela, nele serão exibidos 
            //todos os contatos cadastrados
            dataSource = new SimpleCursorAdapter(this, R.layout.row, contatos, 
                    campos, new int[] { R.id.tvNome, R.id.tvEndereco , R.id.tvTelefone });
            
            //relaciona o dataSource ao próprio listview
            listView.setAdapter(dataSource);
        }else{
            Toast.makeText(this, "Nenhum registro encontrado", Toast.LENGTH_SHORT).show(); 
        }
    }

    //método executado quando o usuário clica no botão voltar do aparelho
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();

        //deleta registros inseridos, simplesmente para limpar essa base que é de teste
        database.execSQL("DELETE FROM AGENDA");        
        
        //fecha a conexão com o Banco de dados
        database.close();        
    }
}



Abaixo seguem as imagens do projeto em execução.




Para o programa funcionar é preciso primeiro clicar no botão "Inserir registros" com isso será exibida uma mensagem de "Registros incluídos com sucesso", em seguida deve ser clicado no botão
"Carregar registros" para ser exibido a lista dos dados inseridos no Banco de Dados SqLite.

Por enquanto é isso pessoal, espero que gostem e comentem, caso tenham alguma dúvida, crítica ou sugestão é só enviar.

Em breve estarei apresentando mais exemplos sobre SqLite.


Posts relacionados:
Criação de uma Agenda -&nbsp;http://escoladeandroid.blogspot.com.br/2012/02/android-criando-uma-agenda-de-contatos.html



Desenvolvi o jogo&nbsp;Circus Puzzle Free&nbsp;ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.





Desenv com qualidade!