Erro estranho ao selecionar item de lista

Nesse caso aqui como ficaria:

	public boolean delete(ClienteVO vo){
		SQLiteDatabase db = new DB(ctx).getWritableDatabase(); // Exclui essa linha também?
		
		return (db.delete(table_name, "id=?", new String[]{vo.getId().toString()}) > 0);
	}

kmunga

Fiz um cadastro de teste e cliquei no botão para listar e deu isso no LogCat:

10-10 21:01:24.134: E/Database(394): close() was never explicitly called on database '/data/data/com.br.aquavendas/databases/aqua.db' 
10-10 21:01:24.134: E/Database(394): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
10-10 21:01:24.134: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
10-10 21:01:24.134: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
10-10 21:01:24.134: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
10-10 21:01:24.134: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
10-10 21:01:24.134: E/Database(394): 	at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
10-10 21:01:24.134: E/Database(394): 	at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
10-10 21:01:24.134: E/Database(394): 	at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
10-10 21:01:24.134: E/Database(394): 	at com.br.aquavendas.dao.ClienteDAO.getAll(ClienteDAO.java:110)
10-10 21:01:24.134: E/Database(394): 	at com.br.aquavendas.Listar.onResume(Listar.java:98)
10-10 21:01:24.134: E/Database(394): 	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
10-10 21:01:24.134: E/Database(394): 	at android.app.Activity.performResume(Activity.java:3823)
10-10 21:01:24.134: E/Database(394): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
10-10 21:01:24.134: E/Database(394): 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
10-10 21:01:24.134: E/Database(394): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
10-10 21:01:24.134: E/Database(394): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-10 21:01:24.134: E/Database(394): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-10 21:01:24.134: E/Database(394): 	at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 21:01:24.134: E/Database(394): 	at android.os.Looper.loop(Looper.java:123)
10-10 21:01:24.134: E/Database(394): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
10-10 21:01:24.134: E/Database(394): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-10 21:01:24.134: E/Database(394): 	at java.lang.reflect.Method.invoke(Method.java:521)
10-10 21:01:24.134: E/Database(394): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-10 21:01:24.134: E/Database(394): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-10 21:01:24.134: E/Database(394): 	at dalvik.system.NativeStart.main(Native Method)
10-10 21:01:24.194: E/Database(394): close() was never explicitly called on database '/data/data/com.br.aquavendas/databases/aqua.db' 
10-10 21:01:24.194: E/Database(394): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
10-10 21:01:24.194: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
10-10 21:01:24.194: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
10-10 21:01:24.194: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
10-10 21:01:24.194: E/Database(394): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
10-10 21:01:24.194: E/Database(394): 	at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
10-10 21:01:24.194: E/Database(394): 	at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
10-10 21:01:24.194: E/Database(394): 	at com.br.aquavendas.banco.DB.getDatabase(DB.java:35)
10-10 21:01:24.194: E/Database(394): 	at com.br.aquavendas.dao.ClienteDAO.<init>(ClienteDAO.java:25)
10-10 21:01:24.194: E/Database(394): 	at com.br.aquavendas.Listar.onResume(Listar.java:97)
10-10 21:01:24.194: E/Database(394): 	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
10-10 21:01:24.194: E/Database(394): 	at android.app.Activity.performResume(Activity.java:3823)
10-10 21:01:24.194: E/Database(394): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
10-10 21:01:24.194: E/Database(394): 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
10-10 21:01:24.194: E/Database(394): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
10-10 21:01:24.194: E/Database(394): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-10 21:01:24.194: E/Database(394): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-10 21:01:24.194: E/Database(394): 	at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 21:01:24.194: E/Database(394): 	at android.os.Looper.loop(Looper.java:123)
10-10 21:01:24.194: E/Database(394): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
10-10 21:01:24.194: E/Database(394): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-10 21:01:24.194: E/Database(394): 	at java.lang.reflect.Method.invoke(Method.java:521)
10-10 21:01:24.194: E/Database(394): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-10 21:01:24.194: E/Database(394): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-10 21:01:24.194: E/Database(394): 	at dalvik.system.NativeStart.main(Native Method)

kmunga,

Viu ai, deu o erro novamente.

Na minha classe DAO, tem o metodo fecha_banco(). Minha dúvida é:

Eu dou db.close() na classe DAO ou na classe que Cadastra ou Edita?

Esse código é o que ta no botão Salvar da Classe CadastrarCliente

		Salvar = (Button) findViewById(R.id.btnSalvar);

		Salvar.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				ClienteVO vo = new ClienteVO();
				vo.setRazaosocial_nome(RazaoSocialNome.getText().toString());
				vo.setNome_fantasia(NomeFantasia.getText().toString());
				vo.setCnpj_cpf(CnpjCpf.getText().toString());
				vo.setIe(IE.getText().toString());
				vo.setEmail(Email.getText().toString());
				vo.setContato(NomeContato.getText().toString());
				vo.setEndereco(Endereco.getText().toString());
				vo.setBairro(Bairro.getText().toString());
				vo.setCep(CEP.getText().toString());
				vo.setCidade(Cidade.getText().toString());
				vo.setTelefone(Telefone.getText().toString());
				vo.setCelular(Celular.getText().toString());
				vo.setData_cadastro(DataCadastro.getText().toString());
				
				ClienteDAO dao = new ClienteDAO(getBaseContext());
				if(dao.insert(vo)){
					Toast.makeText(getBaseContext(), "Sucesso na gravação!", Toast.LENGTH_LONG).show();
					dao.fecha_banco();
					finish();
				}
			}
		});

Minha Classe ClienteDAO

package com.br.aquavendas.dao;

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

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.br.aquavendas.banco.DB;
import com.br.aquavendas.vo.ClienteVO;

public class ClienteDAO {
	
	private SQLiteDatabase db;
	private static String table_name = "clientes";
	private static Context ctx;
	private static String[] columns = {"id", "razaosocial_nome", "nome_fantasia", "cnpj_cpf", "ie", "email", "contato", "endereco", "bairro", "cep", "cidade", "telefone", "celular", "data_cadastro"};
	
	public ClienteDAO(Context ctx){
		this.ctx = ctx;
		
		DB banco =new DB(ctx);      
		db = banco.getDatabase();  
		
	}
	
	public boolean insert(ClienteVO vo){
		//SQLiteDatabase db = new DB(ctx).getWritableDatabase();
		
		ContentValues ctv = new ContentValues();
		ctv.put("razaosocial_nome", vo.getRazaosocial_nome());
		ctv.put("nome_fantasia", vo.getNome_fantasia());
		ctv.put("cnpj_cpf", vo.getCnpj_cpf());
		ctv.put("ie", vo.getIe());
		ctv.put("email", vo.getEmail());
		ctv.put("contato", vo.getContato());
		ctv.put("endereco", vo.getEndereco());
		ctv.put("bairro", vo.getBairro());
		ctv.put("cep", vo.getCep());
		ctv.put("cidade", vo.getCidade());
		ctv.put("telefone", vo.getTelefone());
		ctv.put("celular", vo.getCelular());
		ctv.put("data_cadastro", vo.getData_cadastro());
		
		return (db.insert(table_name, null, ctv) > 0);
		
	}
	
	public boolean delete(ClienteVO vo){
		// SQLiteDatabase db = new DB(ctx).getWritableDatabase();
		
		return (db.delete(table_name, "id=?", new String[]{vo.getId().toString()}) > 0);
	}
	
	public boolean update(ClienteVO vo){
		// SQLiteDatabase db = new DB(ctx).getWritableDatabase();
		
		ContentValues ctv = new ContentValues();
		ctv.put("razaosocial_nome", vo.getRazaosocial_nome());
		ctv.put("nome_fantasia", vo.getNome_fantasia());
		ctv.put("cnpj_cpf", vo.getCnpj_cpf());
		ctv.put("ie", vo.getIe());
		ctv.put("email", vo.getEmail());
		ctv.put("contato", vo.getContato());
		ctv.put("endereco", vo.getEndereco());
		ctv.put("bairro", vo.getBairro());
		ctv.put("cep", vo.getCep());
		ctv.put("cidade", vo.getCidade());
		ctv.put("telefone", vo.getTelefone());
		ctv.put("celular", vo.getCelular());
		ctv.put("data_cadastro", vo.getData_cadastro());
		
		return (db.update(table_name, ctv, "id=?", new String[]{vo.getId().toString()}) > 0);


	}
	
	public ClienteVO getById(Integer ID){
		// SQLiteDatabase db = new DB(ctx).getReadableDatabase();
		
		Cursor rs = db.query(table_name, columns, "id=?", new String[]{ID.toString()}, null, null, null);
		
		ClienteVO vo = null;
		
		if(rs.moveToFirst()){
			vo = new ClienteVO();
			
			vo.setId(rs.getInt(rs.getColumnIndex("id")));
			vo.setRazaosocial_nome(rs.getString(rs.getColumnIndex("razaosocial_nome")));
			vo.setNome_fantasia(rs.getString(rs.getColumnIndex("nome_fantasia")));
			vo.setCnpj_cpf(rs.getString(rs.getColumnIndex("cnpj_cpf")));
			vo.setIe(rs.getString(rs.getColumnIndex("ie")));
			vo.setEmail(rs.getString(rs.getColumnIndex("email")));
			vo.setContato(rs.getString(rs.getColumnIndex("contato")));
			vo.setEndereco(rs.getString(rs.getColumnIndex("endereco")));
			vo.setBairro(rs.getString(rs.getColumnIndex("bairro")));
			vo.setCep(rs.getString(rs.getColumnIndex("cep")));
			vo.setCidade(rs.getString(rs.getColumnIndex("cidade")));
			vo.setTelefone(rs.getString(rs.getColumnIndex("telefone")));
			vo.setCelular(rs.getString(rs.getColumnIndex("celular")));
			vo.setData_cadastro(rs.getString(rs.getColumnIndex("data_cadastro")));
		}
		rs.close();
		return vo;
	}
	
	public List<ClienteVO> getAll(){
		SQLiteDatabase db = new DB(ctx).getReadableDatabase();
		
		Cursor rs = db.rawQuery("SELECT * FROM clientes", null);
		
		List<ClienteVO> lista = new ArrayList<ClienteVO>();
		while(rs.moveToNext()){
			ClienteVO vo = new ClienteVO(rs.getInt(rs.getColumnIndex("id")),rs.getString(rs.getColumnIndex("razaosocial_nome")),rs.getString(rs.getColumnIndex("nome_fantasia")),rs.getString(rs.getColumnIndex("cnpj_cpf")),rs.getString(rs.getColumnIndex("ie")),rs.getString(rs.getColumnIndex("email")),rs.getString(rs.getColumnIndex("contato")),rs.getString(rs.getColumnIndex("endereco")),rs.getString(rs.getColumnIndex("bairro")),rs.getString(rs.getColumnIndex("cep")),rs.getString(rs.getColumnIndex("cidade")),rs.getString(rs.getColumnIndex("telefone")),rs.getString(rs.getColumnIndex("celular")),rs.getString(rs.getColumnIndex("data_cadastro")));
			lista.add(vo);
		}
		rs.close();
		return lista;
	}
	
	// CLIENTE POR NOME	
	public List<ClienteVO> getClientePorNome(String nomeString){
		SQLiteDatabase db = new DB(ctx).getReadableDatabase();
		String[] selectionArgs = {nomeString + "%"};  

		Cursor rs = db.rawQuery("SELECT * FROM clientes WHERE razaosocial_nome like ?", selectionArgs);
		
		List<ClienteVO> lista = new ArrayList<ClienteVO>();
		
		while (rs.moveToNext()) {
			ClienteVO vo = new ClienteVO(rs.getInt(rs.getColumnIndex("id")),rs.getString(rs.getColumnIndex("razaosocial_nome")),rs.getString(rs.getColumnIndex("nome_fantasia")),rs.getString(rs.getColumnIndex("cnpj_cpf")),rs.getString(rs.getColumnIndex("ie")),rs.getString(rs.getColumnIndex("email")),rs.getString(rs.getColumnIndex("contato")),rs.getString(rs.getColumnIndex("endereco")),rs.getString(rs.getColumnIndex("bairro")),rs.getString(rs.getColumnIndex("cep")),rs.getString(rs.getColumnIndex("cidade")),rs.getString(rs.getColumnIndex("telefone")),rs.getString(rs.getColumnIndex("celular")),rs.getString(rs.getColumnIndex("data_cadastro")));
			lista.add(vo);
		}
		rs.close();
		return lista;
	}
	
	public void fecha_banco(){
		if (db != null)
		    db.close();
	}

}

Cara,na classe DAO tu segue criando um novo banco para executar tuas operações

public List&lt;ClienteVO&gt; getAll(){  
       // retire essa linha  SQLiteDatabase db = new DB(ctx).getReadableDatabase();  
          
        Cursor rs = db.rawQuery("SELECT * FROM clientes", null);  
          
        List&lt;ClienteVO&gt; lista = new ArrayList&lt;ClienteVO&gt;();  
        while(rs.moveToNext()){  
            ClienteVO vo = new ClienteVO(rs.getInt(rs.getColumnIndex("id")),rs.getString(rs.getColumnIndex("razaosocial_nome")),rs.getString(rs.getColumnIndex("nome_fantasia")),rs.getString(rs.getColumnIndex("cnpj_cpf")),rs.getString(rs.getColumnIndex("ie")),rs.getString(rs.getColumnIndex("email")),rs.getString(rs.getColumnIndex("contato")),rs.getString(rs.getColumnIndex("endereco")),rs.getString(rs.getColumnIndex("bairro")),rs.getString(rs.getColumnIndex("cep")),rs.getString(rs.getColumnIndex("cidade")),rs.getString(rs.getColumnIndex("telefone")),rs.getString(rs.getColumnIndex("celular")),rs.getString(rs.getColumnIndex("data_cadastro")));  
            lista.add(vo);  
        }  
        rs.close();  
        return lista;  
    }  
      
    // CLIENTE POR NOME   
    public List&lt;ClienteVO&gt; getClientePorNome(String nomeString){  
        // retire essa linha SQLiteDatabase db = new DB(ctx).getReadableDatabase();  
        String[] selectionArgs = {nomeString + "%"};    
  
        Cursor rs = db.rawQuery("SELECT * FROM clientes WHERE razaosocial_nome like ?", selectionArgs);  
          
        List&lt;ClienteVO&gt; lista = new ArrayList&lt;ClienteVO&gt;();  
          
        while (rs.moveToNext()) {  
            ClienteVO vo = new ClienteVO(rs.getInt(rs.getColumnIndex("id")),rs.getString(rs.getColumnIndex("razaosocial_nome")),rs.getString(rs.getColumnIndex("nome_fantasia")),rs.getString(rs.getColumnIndex("cnpj_cpf")),rs.getString(rs.getColumnIndex("ie")),rs.getString(rs.getColumnIndex("email")),rs.getString(rs.getColumnIndex("contato")),rs.getString(rs.getColumnIndex("endereco")),rs.getString(rs.getColumnIndex("bairro")),rs.getString(rs.getColumnIndex("cep")),rs.getString(rs.getColumnIndex("cidade")),rs.getString(rs.getColumnIndex("telefone")),rs.getString(rs.getColumnIndex("celular")),rs.getString(rs.getColumnIndex("data_cadastro")));  
            lista.add(vo);  
        }  
        rs.close();  
        return lista;  
    }  
      

Isso que vc postou é pra arrumar la?

deve arrumar, pelo menos a questão do close, senão resolver eu já não sei mais :confused:

Ok, estou fazendo. Ai faço em todas as DAO que tiver, certo?

Cara, tu cria um banco de dados no construtor e usa ele em toda a classe. Pelo que eu vi, só tinha faltado aquelas duas linhas que eu comentei.

Então, é que outras classes quase iguais a essa.

Ficou assim:

package com.br.aquavendas.dao;

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

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.br.aquavendas.banco.DB;
import com.br.aquavendas.vo.ClienteVO;

public class ClienteDAO {
	
	private SQLiteDatabase db;
	private static String table_name = "clientes";
	private static Context ctx;
	private static String[] columns = {"id", "razaosocial_nome", "nome_fantasia", "cnpj_cpf", "ie", "email", "contato", "endereco", "bairro", "cep", "cidade", "telefone", "celular", "data_cadastro"};
	
	public ClienteDAO(Context ctx){
		this.ctx = ctx;
		
		DB banco =new DB(ctx);      
		db = banco.getDatabase();  
		
	}
	
	public boolean insert(ClienteVO vo){
		//SQLiteDatabase db = new DB(ctx).getWritableDatabase();
		
		ContentValues ctv = new ContentValues();
		ctv.put("razaosocial_nome", vo.getRazaosocial_nome());
		ctv.put("nome_fantasia", vo.getNome_fantasia());
		ctv.put("cnpj_cpf", vo.getCnpj_cpf());
		ctv.put("ie", vo.getIe());
		ctv.put("email", vo.getEmail());
		ctv.put("contato", vo.getContato());
		ctv.put("endereco", vo.getEndereco());
		ctv.put("bairro", vo.getBairro());
		ctv.put("cep", vo.getCep());
		ctv.put("cidade", vo.getCidade());
		ctv.put("telefone", vo.getTelefone());
		ctv.put("celular", vo.getCelular());
		ctv.put("data_cadastro", vo.getData_cadastro());
		
		return (db.insert(table_name, null, ctv) > 0);
		
	}
	
	public boolean delete(ClienteVO vo){
		// SQLiteDatabase db = new DB(ctx).getWritableDatabase();
		
		return (db.delete(table_name, "id=?", new String[]{vo.getId().toString()}) > 0);
	}
	
	public boolean update(ClienteVO vo){
		// SQLiteDatabase db = new DB(ctx).getWritableDatabase();
		
		ContentValues ctv = new ContentValues();
		ctv.put("razaosocial_nome", vo.getRazaosocial_nome());
		ctv.put("nome_fantasia", vo.getNome_fantasia());
		ctv.put("cnpj_cpf", vo.getCnpj_cpf());
		ctv.put("ie", vo.getIe());
		ctv.put("email", vo.getEmail());
		ctv.put("contato", vo.getContato());
		ctv.put("endereco", vo.getEndereco());
		ctv.put("bairro", vo.getBairro());
		ctv.put("cep", vo.getCep());
		ctv.put("cidade", vo.getCidade());
		ctv.put("telefone", vo.getTelefone());
		ctv.put("celular", vo.getCelular());
		ctv.put("data_cadastro", vo.getData_cadastro());
		
		return (db.update(table_name, ctv, "id=?", new String[]{vo.getId().toString()}) > 0);


	}
	
	public ClienteVO getById(Integer ID){
		// SQLiteDatabase db = new DB(ctx).getReadableDatabase();
		
		Cursor rs = db.query(table_name, columns, "id=?", new String[]{ID.toString()}, null, null, null);
		
		ClienteVO vo = null;
		
		if(rs.moveToFirst()){
			vo = new ClienteVO();
			
			vo.setId(rs.getInt(rs.getColumnIndex("id")));
			vo.setRazaosocial_nome(rs.getString(rs.getColumnIndex("razaosocial_nome")));
			vo.setNome_fantasia(rs.getString(rs.getColumnIndex("nome_fantasia")));
			vo.setCnpj_cpf(rs.getString(rs.getColumnIndex("cnpj_cpf")));
			vo.setIe(rs.getString(rs.getColumnIndex("ie")));
			vo.setEmail(rs.getString(rs.getColumnIndex("email")));
			vo.setContato(rs.getString(rs.getColumnIndex("contato")));
			vo.setEndereco(rs.getString(rs.getColumnIndex("endereco")));
			vo.setBairro(rs.getString(rs.getColumnIndex("bairro")));
			vo.setCep(rs.getString(rs.getColumnIndex("cep")));
			vo.setCidade(rs.getString(rs.getColumnIndex("cidade")));
			vo.setTelefone(rs.getString(rs.getColumnIndex("telefone")));
			vo.setCelular(rs.getString(rs.getColumnIndex("celular")));
			vo.setData_cadastro(rs.getString(rs.getColumnIndex("data_cadastro")));
		}
		rs.close();
		return vo;
	}
	
	public List<ClienteVO> getAll(){
	//	SQLiteDatabase db = new DB(ctx).getReadableDatabase();
		
		Cursor rs = db.rawQuery("SELECT * FROM clientes", null);
		
		List<ClienteVO> lista = new ArrayList<ClienteVO>();
		while(rs.moveToNext()){
			ClienteVO vo = new ClienteVO(rs.getInt(rs.getColumnIndex("id")),rs.getString(rs.getColumnIndex("razaosocial_nome")),rs.getString(rs.getColumnIndex("nome_fantasia")),rs.getString(rs.getColumnIndex("cnpj_cpf")),rs.getString(rs.getColumnIndex("ie")),rs.getString(rs.getColumnIndex("email")),rs.getString(rs.getColumnIndex("contato")),rs.getString(rs.getColumnIndex("endereco")),rs.getString(rs.getColumnIndex("bairro")),rs.getString(rs.getColumnIndex("cep")),rs.getString(rs.getColumnIndex("cidade")),rs.getString(rs.getColumnIndex("telefone")),rs.getString(rs.getColumnIndex("celular")),rs.getString(rs.getColumnIndex("data_cadastro")));
			lista.add(vo);
		}
		rs.close();
		return lista;
	}
	
	// CLIENTE POR NOME	
	public List<ClienteVO> getClientePorNome(String nomeString){
		// SQLiteDatabase db = new DB(ctx).getReadableDatabase();
		
		String[] selectionArgs = {nomeString + "%"};  

		Cursor rs = db.rawQuery("SELECT * FROM clientes WHERE razaosocial_nome like ?", selectionArgs);
		
		List<ClienteVO> lista = new ArrayList<ClienteVO>();
		
		while (rs.moveToNext()) {
			ClienteVO vo = new ClienteVO(rs.getInt(rs.getColumnIndex("id")),rs.getString(rs.getColumnIndex("razaosocial_nome")),rs.getString(rs.getColumnIndex("nome_fantasia")),rs.getString(rs.getColumnIndex("cnpj_cpf")),rs.getString(rs.getColumnIndex("ie")),rs.getString(rs.getColumnIndex("email")),rs.getString(rs.getColumnIndex("contato")),rs.getString(rs.getColumnIndex("endereco")),rs.getString(rs.getColumnIndex("bairro")),rs.getString(rs.getColumnIndex("cep")),rs.getString(rs.getColumnIndex("cidade")),rs.getString(rs.getColumnIndex("telefone")),rs.getString(rs.getColumnIndex("celular")),rs.getString(rs.getColumnIndex("data_cadastro")));
			lista.add(vo);
		}
		rs.close();
		return lista;
	}
	
	public void fecha_banco(){
		if (db != null)
		    db.close();
	}

}

No meu CadastroCliente.java no botão Salvar fiz assim:

		Salvar.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				ClienteVO vo = new ClienteVO();
				vo.setRazaosocial_nome(RazaoSocialNome.getText().toString());
				vo.setNome_fantasia(NomeFantasia.getText().toString());
				vo.setCnpj_cpf(CnpjCpf.getText().toString());
				vo.setIe(IE.getText().toString());
				vo.setEmail(Email.getText().toString());
				vo.setContato(NomeContato.getText().toString());
				vo.setEndereco(Endereco.getText().toString());
				vo.setBairro(Bairro.getText().toString());
				vo.setCep(CEP.getText().toString());
				vo.setCidade(Cidade.getText().toString());
				vo.setTelefone(Telefone.getText().toString());
				vo.setCelular(Celular.getText().toString());
				vo.setData_cadastro(DataCadastro.getText().toString());
				
				ClienteDAO dao = new ClienteDAO(getBaseContext());
				if(dao.insert(vo)){
					Toast.makeText(getBaseContext(), "Sucesso na gravação!", Toast.LENGTH_LONG).show();
					dao.fecha_banco();
					finish();
				}
			}
		});

Ta certo? Fecho na Classe que ta Gravando ou Editando. Certo? Não no DAO.

Cara fiz assim:

1º Listei os clientes;
2º Selecionei um da lista e dei um click longo e escolhi editar;
3º Fiz a edição e Atualizei.
4º Cliquei no Botão Voltar do Emulador, não da minha aplicação e:

10-11 15:12:43.500: E/Database(279): close() was never explicitly called on database '/data/data/com.br.aquavendas/databases/aqua.db' 
10-11 15:12:43.500: E/Database(279): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
10-11 15:12:43.500: E/Database(279): 	at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
10-11 15:12:43.500: E/Database(279): 	at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
10-11 15:12:43.500: E/Database(279): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
10-11 15:12:43.500: E/Database(279): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
10-11 15:12:43.500: E/Database(279): 	at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
10-11 15:12:43.500: E/Database(279): 	at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
10-11 15:12:43.500: E/Database(279): 	at com.br.aquavendas.banco.DB.getDatabase(DB.java:35)
10-11 15:12:43.500: E/Database(279): 	at com.br.aquavendas.dao.ClienteDAO.<init>(ClienteDAO.java:25)
10-11 15:12:43.500: E/Database(279): 	at com.br.aquavendas.Listar.onResume(Listar.java:97)
10-11 15:12:43.500: E/Database(279): 	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
10-11 15:12:43.500: E/Database(279): 	at android.app.Activity.performResume(Activity.java:3823)
10-11 15:12:43.500: E/Database(279): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
10-11 15:12:43.500: E/Database(279): 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
10-11 15:12:43.500: E/Database(279): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
10-11 15:12:43.500: E/Database(279): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-11 15:12:43.500: E/Database(279): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-11 15:12:43.500: E/Database(279): 	at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 15:12:43.500: E/Database(279): 	at android.os.Looper.loop(Looper.java:123)
10-11 15:12:43.500: E/Database(279): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
10-11 15:12:43.500: E/Database(279): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-11 15:12:43.500: E/Database(279): 	at java.lang.reflect.Method.invoke(Method.java:521)
10-11 15:12:43.500: E/Database(279): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-11 15:12:43.500: E/Database(279): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-11 15:12:43.500: E/Database(279): 	at dalvik.system.NativeStart.main(Native Method)

Pera um poko, na Classe Editar não dei dao.fecha_banco();

Classe EditarCliente ta assim:

package com.br.aquavendas;

import com.br.aquavendas.dao.ClienteDAO;
import com.br.aquavendas.vo.ClienteVO;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class EditarClientes extends Activity { // Início da Classe EditarClientes
	private int ID = 0; 
	private EditText Id, RazaoSocialNome, NomeFantasia, CnpjCpf, IE, Email, NomeContato, Endereco, Bairro, CEP, Cidade, Telefone, Celular, DataCadastro;
	private Button Atualizar;
	
	@Override
	protected void onCreate(Bundle icicle){ // Início do método onCreate
		super.onCreate(icicle);
		setContentView(R.layout.editar_clientes);
		
		Intent it = getIntent();
		ID = it.getIntExtra("codigo", 1);
		
		// Botão Salvar do xml editar_clientes
		Atualizar = (Button) findViewById(R.id.btnAtualizar);
		
		final ClienteDAO dao = new ClienteDAO(getBaseContext());
		final ClienteVO vo = dao.getById(ID);
		
		Id              = (EditText) findViewById(R.id.edtId);
		RazaoSocialNome = (EditText) findViewById(R.id.edtRazao_Nome);
		NomeFantasia    = (EditText) findViewById(R.id.edtNomeFantasia);
		CnpjCpf         = (EditText) findViewById(R.id.edtCNPJ_CPF);
		IE              = (EditText) findViewById(R.id.edtIE);
		Email           = (EditText) findViewById(R.id.edtEmail);
		NomeContato     = (EditText) findViewById(R.id.edtNomeContato);
		Endereco        = (EditText) findViewById(R.id.edtEndereco);
		Bairro          = (EditText) findViewById(R.id.edtBairro);
		CEP             = (EditText) findViewById(R.id.edtCEP);
		Cidade          = (EditText) findViewById(R.id.edtCidade);
		Telefone        = (EditText) findViewById(R.id.edtTelefone);
		Celular         = (EditText) findViewById(R.id.edtCelular);
		DataCadastro    = (EditText) findViewById(R.id.edtData);
		
		Id.setText(vo.getId().toString());
		RazaoSocialNome.setText(vo.getRazaosocial_nome());
		NomeFantasia.setText(vo.getNome_fantasia());
		CnpjCpf.setText(vo.getCnpj_cpf());
		IE.setText(vo.getIe());
		Email.setText(vo.getEmail());
		NomeContato.setText(vo.getContato());
		Endereco.setText(vo.getEndereco());
		Bairro.setText(vo.getBairro());
		CEP.setText(vo.getCep());
		Cidade.setText(vo.getCidade());
		Telefone.setText(vo.getTelefone());
		Celular.setText(vo.getCelular());
		DataCadastro.setText(vo.getData_cadastro());
		

		Atualizar.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				ClienteVO vo = new ClienteVO();
				vo.setId(ID);
				vo.setRazaosocial_nome(RazaoSocialNome.getText().toString());
				vo.setNome_fantasia(NomeFantasia.getText().toString());
				vo.setCnpj_cpf(CnpjCpf.getText().toString());
				vo.setIe(IE.getText().toString());
				vo.setEmail(Email.getText().toString());
				vo.setContato(NomeContato.getText().toString());
				vo.setEndereco(Endereco.getText().toString());
				vo.setBairro(Bairro.getText().toString());
				vo.setCep(CEP.getText().toString());
				vo.setCidade(Cidade.getText().toString());
				vo.setTelefone(Telefone.getText().toString());
				vo.setCelular(Celular.getText().toString());
				vo.setData_cadastro(DataCadastro.getText().toString());
				
				ClienteDAO dao = new ClienteDAO(getBaseContext());
				if(dao.update(vo)){
					Toast.makeText(getBaseContext(), "Sucesso na atualização!", Toast.LENGTH_LONG).show();
					dao.fecha_banco();
					finish();
				}
			}
		});
		
	} // Fim do método onCreate
	
	 public void mensagemExibir(String titulo, String texto){
	    	AlertDialog.Builder mensagem = new AlertDialog.Builder(EditarClientes.this);
	    	mensagem.setTitle(titulo);
	    	mensagem.setMessage(texto);
	    	mensagem.setNeutralButton("Ok", null);
	    	mensagem.show();
	 }
	
} // Fim da Classe EditarClientes

E deu novamente:

10-11 16:55:42.478: E/Database(281): close() was never explicitly called on database '/data/data/com.br.aquavendas/databases/aqua.db' 
10-11 16:55:42.478: E/Database(281): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
10-11 16:55:42.478: E/Database(281): 	at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
10-11 16:55:42.478: E/Database(281): 	at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
10-11 16:55:42.478: E/Database(281): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
10-11 16:55:42.478: E/Database(281): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
10-11 16:55:42.478: E/Database(281): 	at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
10-11 16:55:42.478: E/Database(281): 	at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
10-11 16:55:42.478: E/Database(281): 	at com.br.aquavendas.banco.DB.getDatabase(DB.java:35)
10-11 16:55:42.478: E/Database(281): 	at com.br.aquavendas.dao.ClienteDAO.<init>(ClienteDAO.java:25)
10-11 16:55:42.478: E/Database(281): 	at com.br.aquavendas.Listar.onResume(Listar.java:97)
10-11 16:55:42.478: E/Database(281): 	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
10-11 16:55:42.478: E/Database(281): 	at android.app.Activity.performResume(Activity.java:3823)
10-11 16:55:42.478: E/Database(281): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
10-11 16:55:42.478: E/Database(281): 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
10-11 16:55:42.478: E/Database(281): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
10-11 16:55:42.478: E/Database(281): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-11 16:55:42.478: E/Database(281): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-11 16:55:42.478: E/Database(281): 	at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 16:55:42.478: E/Database(281): 	at android.os.Looper.loop(Looper.java:123)
10-11 16:55:42.478: E/Database(281): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
10-11 16:55:42.478: E/Database(281): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-11 16:55:42.478: E/Database(281): 	at java.lang.reflect.Method.invoke(Method.java:521)
10-11 16:55:42.478: E/Database(281): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-11 16:55:42.478: E/Database(281): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-11 16:55:42.478: E/Database(281): 	at dalvik.system.NativeStart.main(Native Method)

Cara, já não sei, pesquisei esse erro e achei isso

E o que seria isso? Esse site eu acho meio complicado. O engraçado é que ta funcionando perfeitamente.

A resposta seria essa:

@Override
protected void onDestroy() {
    super.onDestroy();
    if (openHelper != null) {
        openHelper.close();
    }
    if (cdh != null) {
        cdh.close();
    }
}

Onde colocaria isso? Teria que adaptar para o meu, certo?

kmunga, encontrei isso:

"Bom… passei por esse erro e pelejei também…

Observem alguns pontos:
1 - caso sua aplicação de algum outro erro qualquer e feche inesperadamente antes do close de seu cursor, apenas algum tempo depois ela vai avisar que teve que fechar o cursor;
2 - após retornar o cursor feche ele e feche também se der algum erro, implementando as exceções do erro;
3 - sempre que fechar o logcat vai indicar onde estava o cursor, daí vocês vão la e implementem seu fechamento, exception, etc…

tentei relembrar o que usei para resolver esses problemas e acho que descrevi tudo… espero que seguindo esses conselhos consigam resolver tbm…"

http://www.portalandroid.org/comunidade/viewtopic.php?f=5&t=11105

http://www.guj.com.br/java/273309-duvida-android-sqlite

Mas não estou conseguindo arrumar isso.

Será que pode ser na Listar.java?

Listar.java

package com.br.aquavendas;

import java.util.List;

import com.br.aquavendas.adapters.ClienteAdapter;
import com.br.aquavendas.dao.ClienteDAO;
import com.br.aquavendas.vo.ClienteVO;

import android.app.Activity;
import android.app.ListActivity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class Listar extends Activity{
	
	ListView ltw;
	List<ClienteVO> lista = null;
	int idItem = 0;
	private static int MENU_EDITAR = 1;
	private static int MENU_APAGAR = 2;
	private static int MENU_VENDA  = 3;
	private EditText Procurar;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listar);
		ltw = (ListView) findViewById(R.id.ltvDados);
		ltw.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
		
// Modo Filtro Lista - Início		
		Procurar = (EditText) findViewById(R.id.edtProcurar);
		Procurar.requestFocus();
		
		
		Procurar.addTextChangedListener(new TextWatcher() {
			
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
			//	Chama método se digitar letra no campo edtProcurar
				filtrarLista();
				
			}
			
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void afterTextChanged(Editable s) {
				// TODO Auto-generated method stub
				
			}
		});
// Modo Filtro Lista - Fim		
		
		
		final Button btnApagar = (Button) findViewById(R.id.btnApagar);
		
		registerForContextMenu(ltw);
		
		ltw.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				btnApagar.setVisibility(0);
			//	Toast.makeText(getBaseContext(), "AQUI!", Toast.LENGTH_LONG).show();
			}
		});
		
	}
	
	
	@Override
	public void onResume(){
		super.onResume();
		ClienteDAO dao = new ClienteDAO(getBaseContext());
		lista = dao.getAll();
		ltw.setAdapter(new ClienteAdapter(getBaseContext(), lista));
	}
	
	public void Apagar_click(View v){
	
	}
	
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
		menu.setHeaderTitle(lista.get(info.position).getContato());
		
		menu.add(Menu.NONE, MENU_EDITAR, 0, "Editar");
		menu.add(Menu.NONE, MENU_APAGAR, 0, "Apagar");
		menu.add(Menu.NONE, MENU_VENDA,  0, "Venda");
		
	}
	
	@Override
	public boolean onContextItemSelected(MenuItem item){
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo )item.getMenuInfo();
		
		idItem = lista.get(info.position).getId();
		
		if(item.getItemId() == MENU_EDITAR){
			Intent it = new Intent(getBaseContext(), EditarClientes.class);
			it.putExtra("codigo", idItem);
			startActivity(it);
		}else if(item.getItemId() == MENU_APAGAR){
			Builder msg = new Builder(Listar.this);
			msg.setMessage("Deseja excluir este cliente?");
			
			msg.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					ClienteDAO dao = new ClienteDAO(getBaseContext());
					ClienteVO cliente = dao.getById(idItem);
					if(dao.delete(cliente) == true){
						Toast.makeText(getBaseContext(), "Excluído com sucesso!", Toast.LENGTH_LONG).show();
						ltw.setAdapter(new ClienteAdapter(getBaseContext(), dao.getAll()));
						dao.fecha_banco();
					}
				}
			});
			
			msg.setNegativeButton("Não", null);
			
			msg.show();
		}else if(item.getItemId() == MENU_VENDA){
			Intent it = new Intent(getBaseContext(), Vendas.class);
			it.putExtra("codigo", idItem);
			startActivity(it);
			finish();
//			Toast.makeText(getBaseContext(), "Venda em desenvolvimento, aguarde!", Toast.LENGTH_LONG).show();
		}
//		ClienteDAO dao = new ClienteDAO(getBaseContext());
//		dao.fecha_banco();
		return super.onContextItemSelected(item);
	}

// FILTRAR LISTA - COMEÇA AQUI
	
	// FILTRAR LISTVIEW AO DIGITAR LETRA NO CAMPO
	private void filtrarLista(){
		//	LISTAR TODOS OS CLIENTES COM FILTRO      
			carregarListaClientes_Filtro();

	}


	// Lista todos os clientes com nome, telefone e celular com o filtro
	private void carregarListaClientes_Filtro(){
	    ClienteDAO dao = new ClienteDAO(getBaseContext());
		String nomeString = Procurar.getText().toString();
		// Cursor cursor;	
		// dao.getClientePorNome(nomeString);
		// cursor.moveToFirst();
		//    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.mostrabanco, cursor, new String[] {SQLConstantes.KEY_RAZAOSOCIALNOME, SQLConstantes.KEY_CELULAR, SQLConstantes.KEY_EMAIL}, new int[] {R.id.lblCampo1,R.id.lblCampo2,R.id.lblCampo3});
		//SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, cursor, new String[] {SQLConstantes.KEY_NOME, SQLConstantes.KEY_CELULAR}, new int[] {android.R.id.text1, android.R.id.text2});
		// setListAdapter(adapter);
		ltw.setAdapter(new ClienteAdapter(getBaseContext(), dao.getClientePorNome(nomeString)));  
	}
	// FILTRAR LISTA - ACABA AQUI	
}

O que o site tá flanado é fechar o banco no metodo onDestroy().

pode ser nesta parte

@Override public void onResume(){ super.onResume(); ClienteDAO dao = new ClienteDAO(getBaseContext()); lista = dao.getAll(); ltw.setAdapter(new ClienteAdapter(getBaseContext(), lista)); }

tu não fechou o banco, tenta um dao.fecha_banco();

No DAO, CadastrarClientes, EditarClientes, qual classe faria isso?

Adaptar esse para o meu, certo? Como seria?

@Override
protected void onDestroy() {
    super.onDestroy();
    if (openHelper != null) {
        openHelper.close();
    }
    if (cdh != null) {
        cdh.close();
    }
}

Fiz assim, na Listar.java

package com.br.aquavendas;

import java.util.List;

import com.br.aquavendas.adapters.ClienteAdapter;
import com.br.aquavendas.dao.ClienteDAO;
import com.br.aquavendas.vo.ClienteVO;

import android.app.Activity;
import android.app.ListActivity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class Listar extends Activity{
	
	ListView ltw;
	List<ClienteVO> lista = null;
	int idItem = 0;
	
	private SQLiteDatabase db;
	private static int MENU_EDITAR = 1;
	private static int MENU_APAGAR = 2;
	private static int MENU_VENDA  = 3;
	private EditText Procurar;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listar);
		ltw = (ListView) findViewById(R.id.ltvDados);
		ltw.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
		
// Modo Filtro Lista - Início		
		Procurar = (EditText) findViewById(R.id.edtProcurar);
		Procurar.requestFocus();
		
		
		Procurar.addTextChangedListener(new TextWatcher() {
			
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
			//	Chama método se digitar letra no campo edtProcurar
				filtrarLista();
				
			}
			
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void afterTextChanged(Editable s) {
				// TODO Auto-generated method stub
				
			}
		});
// Modo Filtro Lista - Fim		
		
		
		final Button btnApagar = (Button) findViewById(R.id.btnApagar);
		
		registerForContextMenu(ltw);
		
		ltw.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				btnApagar.setVisibility(0);
			//	Toast.makeText(getBaseContext(), "AQUI!", Toast.LENGTH_LONG).show();
			}
		});
		
	}
	
	
	@Override
	public void onResume(){
		super.onResume();
		ClienteDAO dao = new ClienteDAO(getBaseContext());
		lista = dao.getAll();
		ltw.setAdapter(new ClienteAdapter(getBaseContext(), lista));
		dao.fecha_banco();
	}
	
	@Override  
	protected void onDestroy() {  
	    super.onDestroy();  
	    if (db != null) {  
	        db.close();  
	    }  
	}  
	
	
	
	public void Apagar_click(View v){
	
	}
	
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
		menu.setHeaderTitle(lista.get(info.position).getContato());
		
		menu.add(Menu.NONE, MENU_EDITAR, 0, "Editar");
		menu.add(Menu.NONE, MENU_APAGAR, 0, "Apagar");
		menu.add(Menu.NONE, MENU_VENDA,  0, "Venda");
		
	}
	
	@Override
	public boolean onContextItemSelected(MenuItem item){
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo )item.getMenuInfo();
		
		idItem = lista.get(info.position).getId();
		
		if(item.getItemId() == MENU_EDITAR){
			Intent it = new Intent(getBaseContext(), EditarClientes.class);
			it.putExtra("codigo", idItem);
			startActivity(it);
		}else if(item.getItemId() == MENU_APAGAR){
			Builder msg = new Builder(Listar.this);
			msg.setMessage("Deseja excluir este cliente?");
			
			msg.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					ClienteDAO dao = new ClienteDAO(getBaseContext());
					ClienteVO cliente = dao.getById(idItem);
					if(dao.delete(cliente) == true){
						Toast.makeText(getBaseContext(), "Excluído com sucesso!", Toast.LENGTH_LONG).show();
						ltw.setAdapter(new ClienteAdapter(getBaseContext(), dao.getAll()));
						dao.fecha_banco();
					}
				}
			});
			
			msg.setNegativeButton("Não", null);
			
			msg.show();
		}else if(item.getItemId() == MENU_VENDA){
			Intent it = new Intent(getBaseContext(), Vendas.class);
			it.putExtra("codigo", idItem);
			startActivity(it);
			finish();
//			Toast.makeText(getBaseContext(), "Venda em desenvolvimento, aguarde!", Toast.LENGTH_LONG).show();
		}
//		ClienteDAO dao = new ClienteDAO(getBaseContext());
//		dao.fecha_banco();
		return super.onContextItemSelected(item);
	}

// FILTRAR LISTA - COMEÇA AQUI
	
	// FILTRAR LISTVIEW AO DIGITAR LETRA NO CAMPO
	private void filtrarLista(){
		//	LISTAR TODOS OS CLIENTES COM FILTRO      
			carregarListaClientes_Filtro();

	}


	// Lista todos os clientes com nome, telefone e celular com o filtro
	private void carregarListaClientes_Filtro(){
	    ClienteDAO dao = new ClienteDAO(getBaseContext());
		String nomeString = Procurar.getText().toString();
		// Cursor cursor;	
		// dao.getClientePorNome(nomeString);
		// cursor.moveToFirst();
		//    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.mostrabanco, cursor, new String[] {SQLConstantes.KEY_RAZAOSOCIALNOME, SQLConstantes.KEY_CELULAR, SQLConstantes.KEY_EMAIL}, new int[] {R.id.lblCampo1,R.id.lblCampo2,R.id.lblCampo3});
		//SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, cursor, new String[] {SQLConstantes.KEY_NOME, SQLConstantes.KEY_CELULAR}, new int[] {android.R.id.text1, android.R.id.text2});
		// setListAdapter(adapter);
		ltw.setAdapter(new ClienteAdapter(getBaseContext(), dao.getClientePorNome(nomeString)));  
	}
	// FILTRAR LISTA - ACABA AQUI	
}