Erro estranho

Pessoal, o que seria esse erro:

08-29 13:53:38.610: E/Cursor(343): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.br.aquavendas/databases/aqua, table = clientes, query = SELECT * FROM clientes WHERE _id=1
08-29 13:53:38.610: E/Cursor(343): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
08-29 13:53:38.610: E/Cursor(343): at android.database.sqlite.SQLiteCursor.(SQLiteCursor.java:210)

O engraçado é que a aplicação funciona normalmente. Dá essa mensagem quando clico em um item da lista.

Alguém???

Tu ta fechando o cursor?

Então, o problema é em que parte do código que fecho. Pq tem duas formas de clicar na lista:

A primeira se clicar em um item abre a tela de Cadastro
A segunda é um long_click

cursor.close();

Não to sabendo onde fechar, alguém poderia me ajudar? Eu listo os clientes nesse trecho aqui:

//		LISTAR TODOS OS CLIENTES      
        if(opcao.equals(Main.ItemMenu_2)){
        	carregaListaCliente();
        }

Seria isso:

Cursor cliente = mDb.getCliente(mId);
cliente.close();
Cursor produto = mDb.getProduto(mId);
produto.close();

Alguém?

O ideal é fechar o Cursor logo após você deixar de usá-lo, depois que você preencher o seu objeto com os dados do cursor, fechá-lo.

Carrego aqui

	// Lista todos os clientes 
    private void carregaListaCliente(){
    	Cursor cursor;	
		db.open();
	    cursor = db.getTodosClientes();
	    cursor.moveToFirst();
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.mostrabanco, cursor, new String[] {DbAdapter.KEY_RAZAOSOCIALNOME, DbAdapter.KEY_CELULAR, DbAdapter.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[] {DbAdapter.KEY_NOME, DbAdapter.KEY_CELULAR}, new int[] {android.R.id.text1, android.R.id.text2});
	    setListAdapter(adapter);
	    db.close();
	    //cursor.close();
    }

Se habilitar a linha comentada cursor.close(), na hora de mostrar a lista não tem nada.

Seria nesse trecho aqui:

		if(mId > 0 && cliente.moveToFirst()){ 
		  IdCodigoCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_IDCLI)));
                   // colocaria aqui o cliente.close(); ?????
		  Log.d("CarrosCliente", "mId: " + mId); // e aqui 
		  NomeCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_RAZAOSOCIALNOME)));
		}

Alguém?

Faça o seguinte: monte uma lista a partir do seu curso e passe essa lista para o seu Adapter, a lista com os objetos que deseja exibir.
Após preencher a lista com os dados do Cursor, feche-o.

Não fique postando mensagens do tipo “Alguém?”. Não temos SLA no GUJ.

Na verdade, eu utilizo o que vem do cursor aqui. Então, acho que deveria fechá-lo onde está comentado, correto?

if(mId > 0 && cliente.moveToFirst()){   
  IdCodigoCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_IDCLI)));  
                 // colocaria aqui o cliente.close(); ?????  
  Log.d("CarrosCliente", "mId: " + mId); // e aqui   
  NomeCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_RAZAOSOCIALNOME)));  
}  

Não, se você fechar onde está comentado, na hora de setar o Nome você não terá mais o Cursor.

Então seria no final:

NomeCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_RAZAOSOCIALNOME)));
cliente.close();

Obs.: Postei o onCreate no post do Spinner.

Está dando esse erro:

08-30 22:37:32.683: E/Cursor(278): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.br.aquavendas/databases/aqua, table = clientes, query = SELECT * FROM clientes WHERE _id=6

Não estou identificando onde tenho que fechar esse Cursor.

Chamo a Lista da classe Vendas

		Clientes = (Button) findViewById(R.id.btnClientes);
		
		Clientes.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				  Intent intent = new Intent(Vendas.this, Lista.class);  
				  intent.putExtra("itemMenu", "2 - Listar Clientes");  
				  startActivity(intent);
			}
		});

Esse trecho é o que carrega o listview com clientes, está na classe Lista.

	// Lista todos os clientes 
    private void carregaListaCliente(){
    	Cursor cursor;	
		db.open();
	    cursor = db.getTodosClientes();
	    cursor.moveToFirst();
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.mostrabanco, cursor, new String[] {DbAdapter.KEY_RAZAOSOCIALNOME, DbAdapter.KEY_CELULAR, DbAdapter.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[] {DbAdapter.KEY_NOME, DbAdapter.KEY_CELULAR}, new int[] {android.R.id.text1, android.R.id.text2});
	    setListAdapter(adapter);
	    db.close();
    }