Oi gente, não sei porque, o cursor não está recebendo nada da query, abaixo vão as classes envolvidas na situação: A primeira classe, na linha 37, chama um método da segunda, a segunda(através do método que começa na linha 40) deve retornar um List para o ListView da primeira.
package meus.contatos;
import java.util.List;
import meus.contatos.auxiliares.Contato;
import meus.contatos.auxiliares.ContatosListAdapter;
import meus.contatos.auxiliares.LerGravarExcluir;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
public class ListarContatos extends Activity implements OnItemClickListener {
List<Contato> contatos;
ListView listViewContatos;
LerGravarExcluir acoesBancoDados;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listarcontatos);
listViewContatos = (ListView) findViewById(R.id.contatosListView);
acoesBancoDados = new LerGravarExcluir(this);
contatos = acoesBancoDados.listarContatos();
listViewContatos.setAdapter(new ContatosListAdapter(this, contatos));
listViewContatos.setOnItemClickListener(this);
}
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.novo_contato:
Intent it = new Intent (this, IncluirContato.class);
startActivity(it);
finish();
return true;
case R.id.sair:
finish();
return true;
default:
return false;
}
}
public void onItemClick(AdapterView<?> parent, View view, int posicao, long identification) {
Contato cont = (Contato) listViewContatos.getAdapter().getItem(posicao);
String nome = cont.getNome();
String email = cont.getEmail();
String codPaisCidade = cont.getCodPaisCidade();
String fone = cont.getFone();
String endereco = cont.getEndereco();
String cidade = cont.getCidade();
String pais = cont.getPais();
int indice = posicao;
Intent it = new Intent (this, DetalhesContato.class);
it.putExtra("nome", nome);
it.putExtra("email", email);
it.putExtra("codPaisCidade", codPaisCidade);
it.putExtra("fone", fone);
it.putExtra("endereço", endereco);
it.putExtra("cidade", cidade);
it.putExtra("país", pais);
it.putExtra("indice", indice);
startActivity(it);
finish();
}
protected void onDestroy() {
super.onDestroy();
//Fecha o Banco de Dados
acoesBancoDados.fechar();
}
}
package meus.contatos.auxiliares;
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 android.util.Log;
public class LerGravarExcluir {
//Nome do banco
private static final String NOME_BANCO = "lista_contatos";
//Nome da tabela
public static final String NOME_TABELA = "contatos";
protected SQLiteDatabase db;
Cursor cursor;
List<Contato> contatos;
//Método construtor
public LerGravarExcluir(Context ctx) {
// Abre o banco de dados já existente
db = ctx.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);
}
/*
O dois método abaixo retorna um list, que será usado para "fabricar", dentro da classe
ContatosListAdapter, o conteúdo do ListView.
*/
public List<Contato> listarContatos() {
try {
//select * from contatos
cursor = db.query(NOME_TABELA, Contato.colunas, null, null, null, null, null, null);
}catch (SQLException e) {
Log.e("Erro", e.toString());
}
contatos = new ArrayList<Contato>();
if (cursor == null) {
Log.e("Erro", "Cursor nulo");
}else{
if (cursor.moveToFirst()) {
//Recupera os índices das colunas
int idxId = cursor.getColumnIndex(Contato.ID);
int idxNome = cursor.getColumnIndex(Contato.NOME);
int idxEmail = cursor.getColumnIndex(Contato.EMAIL);
int idxCodPaisCidade = cursor.getColumnIndex(Contato.COD_PAIS_CIDADE);
int idxFone = cursor.getColumnIndex(Contato.FONE);
int idxEndereco = cursor.getColumnIndex(Contato.ENDERECO);
int idxCidade = cursor.getColumnIndex(Contato.CIDADE);
int idxPais = cursor.getColumnIndex(Contato.PAIS);
//Loop até o final
do {
Contato contato = new Contato();
//recupera os atributos de contato
contato.setId(cursor.getLong(idxId));
contato.setNome(cursor.getString(idxNome));
contato.setEmail(cursor.getString(idxEmail));
contato.setCodPaisCidade(cursor.getString(idxCodPaisCidade));
contato.setFone(cursor.getString(idxFone));
contato.setEndereco(cursor.getString(idxEndereco));
contato.setCidade(cursor.getString(idxCidade));
contato.setPais(cursor.getString(idxPais));
contatos.add(contato);
} while (cursor.moveToNext());
}
cursor.close();
}
return contatos;
}
//Atualiza um contato
public void atualizarContato (Contato contato) {
ContentValues values = new ContentValues();
values.put(Contato.NOME, contato.getNome());
values.put(Contato.EMAIL, contato.getEmail());
values.put(Contato.COD_PAIS_CIDADE, contato.getCodPaisCidade());
values.put(Contato.FONE, contato.getFone());
values.put(Contato.ENDERECO, contato.getEndereco());
values.put(Contato.CIDADE, contato.getCidade());
values.put(Contato.PAIS, contato.getPais());
long id = contato.getId();
String where = "ID =" + id;
db.update(NOME_TABELA, values, where, null);
}
//Insere um contato
public void inserirContato (String nome, String email, String codPaisCidade, String fone, String endereco,
String cidade, String pais) {
ContentValues values = new ContentValues();
values.put(Contato.NOME, nome);
values.put(Contato.EMAIL, email);
values.put(Contato.COD_PAIS_CIDADE, codPaisCidade);
values.put(Contato.FONE, fone);
values.put(Contato.ENDERECO, endereco);
values.put(Contato.CIDADE, cidade);
values.put(Contato.PAIS, pais);
db.insert(NOME_TABELA, "", values);
}
//Apaga um contato
public void apagarContato(Contato contato) {
long id = contato.getId();
String where = "ID =" + id;
db.delete(NOME_TABELA, where, null);
}
//Fecha o banco
public void fechar() {
db.close();
}
}
package meus.contatos.auxiliares;
public class Contato {
private Long id;
private String nome;
private String email;
private String codPaisCidade;
private String fone;
private String pais;
private String cidade;
private String endereco;
public static final String ID = "ID";
public static final String NOME = "nome";
public static final String EMAIL = "email";
public static final String COD_PAIS_CIDADE = "codPaisCidade";
public static final String FONE = "fone";
public static final String ENDERECO = "endereco";
public static final String CIDADE = "cidade";
public static final String PAIS = "pais";
public static String[] colunas = new String[] { ID, NOME, EMAIL, COD_PAIS_CIDADE, FONE, ENDERECO, CIDADE, PAIS};
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCodPaisCidade() {
return codPaisCidade;
}
public void setCodPaisCidade(String codPaisCidade) {
this.codPaisCidade = codPaisCidade;
}
public String getFone() {
return fone;
}
public void setFone(String fone) {
this.fone = fone;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getPais() {
return pais;
}
public void setPais(String pais) {
this.pais = pais;
}
}