Erro estranho ao selecionar item de lista

EditarClientes.java

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.database.sqlite.SQLiteDatabase;
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 SQLiteDatabase db;
	
	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
	
	@Override  
	protected void onDestroy() {  
	    super.onDestroy();  
	    if (db != null) {  
	        db.close();  
	    }  
	}  

	
	 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

Não sei mais onde fazer. Continua dando a mensagem

10-11 18:24:00.556: E/Database(278): close() was never explicitly called on database '/data/data/com.br.aquavendas/databases/aqua.db' 
10-11 18:24:00.556: E/Database(278): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
10-11 18:24:00.556: E/Database(278): 	at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
10-11 18:24:00.556: E/Database(278): 	at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
10-11 18:24:00.556: E/Database(278): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
10-11 18:24:00.556: E/Database(278): 	at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
10-11 18:24:00.556: E/Database(278): 	at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
10-11 18:24:00.556: E/Database(278): 	at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
10-11 18:24:00.556: E/Database(278): 	at com.br.aquavendas.banco.DB.getDatabase(DB.java:35)
10-11 18:24:00.556: E/Database(278): 	at com.br.aquavendas.dao.ClienteDAO.<init>(ClienteDAO.java:25)
10-11 18:24:00.556: E/Database(278): 	at com.br.aquavendas.EditarClientes.onCreate(EditarClientes.java:39)
10-11 18:24:00.556: E/Database(278): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-11 18:24:00.556: E/Database(278): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-11 18:24:00.556: E/Database(278): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-11 18:24:00.556: E/Database(278): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-11 18:24:00.556: E/Database(278): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-11 18:24:00.556: E/Database(278): 	at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 18:24:00.556: E/Database(278): 	at android.os.Looper.loop(Looper.java:123)
10-11 18:24:00.556: E/Database(278): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
10-11 18:24:00.556: E/Database(278): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-11 18:24:00.556: E/Database(278): 	at java.lang.reflect.Method.invoke(Method.java:521)
10-11 18:24:00.556: E/Database(278): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-11 18:24:00.556: E/Database(278): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-11 18:24:00.556: E/Database(278): 	at dalvik.system.NativeStart.main(Native Method)

http://maicon.strey.nom.br/blog/2012/07/20/como-interpretar-o-log-do-android/

Classe DB.java

package com.br.aquavendas.banco;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DB extends SQLiteOpenHelper{

	private static String dbName = "aqua.db";
	private static String sql_cliente = "CREATE TABLE [clientes] ([id] integer primary key autoincrement, [razaosocial_nome] text, [nome_fantasia] text, [cnpj_cpf] text, [ie] text, [email] text, [contato] text, [endereco] text, [bairro] text, [cep] text, [cidade] text, [telefone] text, [celular] text, [data_cadastro] text);";	
	private static String sql_produto = "CREATE TABLE [produtos] ([id] integer primary key autoincrement, [linha] text, [produto] text, [embalagem] text, [valor_unitario] double(10,2), [valor_caixa] double(10,2), [tipo] text);";	
	private static String sql_venda  = "CREATE TABLE [vendas] ([id] integer primary key autoincrement, [data_venda] text, [id_cliente] text, [id_produto] text, [qtde] text, [unitario] text, [desconto] text, [total] text, [vendedor] text);";
	
	private static int version = 1;
	
	public DB(Context ctx) {
		super(ctx, dbName, null, version);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(sql_cliente);
		db.execSQL(sql_produto);
		db.execSQL(sql_venda);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		
	}
	
	public SQLiteDatabase getDatabase(){    
        return this.getWritableDatabase();    // pelo LogCat linha 35 é aqui.
    }   

}

Veio, já não sei mais o que fazer para te ajudar ai :confused: se eu descobrir algo volto a postar aqui.

Muito menos eu, não sei o que fazer.

Olá fbrigatt

Dei uma olhada rápida nos códigos que postou e notei que está com uma bela confusão!
Como você vem de uma ferramenta RAD, com Java e o Android você precisa retreinar o seu paradigma de programação.
Detalhes que antes a ferramenta cuidava agora é você quem deve se preocupar.
Não conheço o Delphi, então estou achando que seja isso. Se estiver errado, por favor, me corrija!

Veja a activity EditarClientes:

Você definiu essa variável “private SQLiteDatabase db;” e no onCreate você fez:

final ClienteDAO dao = new ClienteDAO(getBaseContext()); final ClienteVO vo = dao.getById(ID);
E no onClick do botão atualizar:

ClienteDAO dao = new ClienteDAO(getBaseContext()); if(dao.update(vo)){ Toast.makeText(getBaseContext(), "Sucesso na atualização!", Toast.LENGTH_LONG).show(); dao.fecha_banco(); finish(); }

E no onDestroy

if (db != null) { db.close(); }

Note que você criou duas instâncias do seu ClienteDAO e só fecha no "if(dao.update(vo)){ " ficando aberto se não entrar no if ( e se não entrar no onClick…).
Outra coisa é que no onDestroy está checando a variável db, mas não vi nenhuma referência a ela no código postado. Fica uma sensação de que está misturando conceitos: não deveria estar usando o DAO?

A minha sensação é de que não esteja usando um material adequado para estudar/aprender o Android, se for isso recomendo esse livro da Casa do Código, é bem sintético mas para você vai ser muito produtivo, acredite.
Google Android: crie aplicações para celulares e tablets do João Bosco Monteiro.
E tem outra vantagem: é bem acessível R$29,90. (Estou fazendo propaganda de graça!).
Em poucas horas dá para ler e você vai ter um bom exemplo de como programar o Android.

Outra sensação que fica é que está copiando/colando código sem saber/entender para que serve/como funciona. Assim não dá. Programar desse jeito é uma temeridade.

Desculpe-me e corrija-me se estiver errado, mas é o que sinto.
Abraços

A H Gusukuma, obrigado pelas dicas. Ok, vou ver esse livro. Mas no momento, preciso arrumar essa bagunça, como que faria? Qual seria o caminho pra começar a arrumar isso? To tentando terminar, mas esse erro ta me deixando loko. Me ajuda, prometo não incomodar mais. Por onde e como como começar a arrumar? Qual seria a maneira correta pra arrumar?

Obrigado, e você está certíssimo no que disse, valeu.

Aqui deveria ter mais coisa? Tirar o if como postei aqui? Teria que dar um dao.fecha_banco() também? Se colocar o dao.fecha_banco(), vai dar erro.

	@Override  
	protected void onDestroy() {  
	    super.onDestroy();  
	        db.close();
	}  

No onClick do botão atualizar: Aqui está certo?

no onClick do botão atualizar: 
ClienteDAO dao = new ClienteDAO(getBaseContext());    
  if(dao.update(vo)){    
      Toast.makeText(getBaseContext(), "Sucesso na atualização!", Toast.LENGTH_LONG).show();    
      dao.fecha_banco();    
      finish();    
  }    

Acho que você deveria começar pelo livro. É ebook.
Esquece o projeto por algumas horas, leia o livro, vai ganhar dias com isso.
Não adianta ficar focado todo o tempo em corrigir sem um norte!

PS: Eu teria que gastar um tempo enorme para te ajudar, um tempo que infelizmente não tenho.
Acredite, vai sair muito mais barato para nós dois se você dar uma estudada no livro.

Me passa o link do livro, vc tem ai?

Em baixo da página tem: Alura, Caellum e Casa do Código

Parece que consegui arrumar, estou testando.

Resolveu?

Parece que sim. Agora estou com outro problema, poderia me ajudar?

http://www.guj.com.br/java/304344-menus-e-sub-menus-actionbar

[quote=fbrigatt]Parece que sim. Agora estou com outro problema, poderia me ajudar?

http://www.guj.com.br/java/304344-menus-e-sub-menus-actionbar[/quote]

Seria interessante postar como resolveu o problema, ajudará outros com o mesmo problema.
Grato

Ok, Resolvido.

A H Gusukuma

Tem como ver esse link aqui:

http://www.guj.com.br/java/304344-menus-e-sub-menus-actionbar

Não entendeu, explica como resolveu o problema.

Fiz o que vc tinha dito. Tinha duas instâncias do DAO aberta e somente uma fechada. Removi a que estava sobrando porque não precisava dela e resolveu o problema.

[quote=fbrigatt]A H Gusukuma

Tem como ver esse link aqui:

http://www.guj.com.br/java/304344-menus-e-sub-menus-actionbar[/quote]

Não sei, não tenho conhecimento do assunto.

Ok, minha solução foi clara? As vezes alguém está tendo o mesmo problema, ta aí a solução