Erro estranho ao selecionar item de lista

Seria essa linha:

SQLiteDatabase db = new DB(ctx).getWritableDatabase();

Colocar ela na Classe DB, certo?

Até pode veio, mas sabe-se lá deus quando vou conseguir fazer.

[quote=fbrigatt]Seria essa linha:

SQLiteDatabase db = new DB(ctx).getWritableDatabase();

Colocar ela na Classe DB, certo?[/quote]

Não veio, o getWritableDatabase() tu coloca no onCreate() da tua classe DB.

no construtor do teu DAO

db = new DB(ctx);

Instancia o teu db

[code]
private SQLiteDatabase db;

[code]

Entendeu? fazendo isso, tu iria usar o db instanciado em qualquer dos teus métodos, sem a necessidade de criar um novo objeto para cada ação.

Vou postando aqui o que to fazendo então, ai vc vai vendo, é melhor?

Seria isso: Classe DB

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 SQLiteDatabase db;
	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);
		
		SQLiteDatabase db = new DB(ctx).getWritableDatabase();
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		
	}

}

to tri atucanado aqui, te passei a classe DB errada

[quote=fbrigatt]kmunga, tenho a classe DB que é onde cria o banco. O que posso fazer nela pra acabar com esse erro?

[code]
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();
   }

}
[/code][/quote]

ai no construtor da tua classe dao

DB banco =new DB(ctx);
db = banco.getDatabase();

Sobre fechar o banco, pense assim, tua aplicação precisa carregar uma lista de usuarios que estão em teu banco o que tu faz?

1 - Abre o banco (ou cria caso nao exista);
2 - Faz a operação, no caso, retorna uma lista com os usuarios cadastrados;
3 - Fecha o banco;

cada ação da tua aplicação deve obedecer essa logica.

Ta dando esse erro:

db.getWritableDatabase(); The method getWritableDatabase() is undefined for the type SQLiteDatabase

Classe DB

Não to entendendo onde tem que fechar o banco nas Classes DAO, me ajuda.

De uma olhada no ultimo post editado

Seria o que vc disse:

“to tri atucanado aqui, te passei a classe DB errada”, rs?

[quote=fbrigatt]Seria o que vc disse:

“to tri atucanado aqui, te passei a classe DB errada”, rs?[/quote]

Esse mesmo, mas acho que agora vai funcionar, se tu pensar naquela logica tu deve resolver a questão.

Eu to tri atucanado aqui no trampo, pra ti ter uma ideia, era pra ter dado um citar e acabei editando o topico.

De boa, vc tem skype ou gtalk?

eu não posso usar aqui no meu serviço, mas vamos teclando por aqui mesmo, mais pessoas podem ver e tentar ajudar.

Tudo bem, é pra contato mesmo, podemos ficar aqui, tudo bem.

kmunga,

Faltou te perguntar como seria para fechar o banco nas Classes.

db.close();

Seria isso? Em que parte do código colocaria essa linha se fosse isso?

Essa linha nas Classes DAO eu tiro?

SQLiteDatabase db = new DB(ctx).getWritableDatabase();

E coloco isso:

DB banco =new DB(ctx);  
db = banco.getDatabase();  

[quote=fbrigatt]kmunga,

Faltou te perguntar como seria para fechar o banco nas Classes.

db.close();

Seria isso? Em que parte do código colocaria essa linha se fosse isso?

[/quote]

Pense naquilo que te disse, por exemplo no trecho que tu deletou um determinado usuario

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(); }

Entendeu, tu abriu o dao (e o banco), fez as operações que queria e então mandou o dao fechar o banco, pois não esta mais sendo usado.

[quote=fbrigatt]kmunga,

Essa linha nas Classes DAO eu tiro?

SQLiteDatabase db = new DB(ctx).getWritableDatabase();

E coloco isso:

DB banco =new DB(ctx); db = banco.getDatabase(); [/quote]

Cara, tu cria o teu banco de dados no construtor do DAO, ai tu remove todas os SQLiteDatabase db = new DB(ctx).getWritableDatabase(); demais do teu codigo, pois não sao mais necessarios.

No dado tu vai manipular tuas informações apenas com o objeto criado, o db, não necessitando criar novos novamente.

Então na Classe DB coloco isso:

     public SQLiteDatabase getDatabase(){  
             return this.getWritableDatabase();  
       }  

E onde tem essa linha nas Classes DAO eu tiro:

SQLiteDatabase db = new DB(ctx).getWritableDatabase();  

E coloco isso no Construtor:

DB banco =new DB(ctx);    
db = banco.getDatabase();  

Que seria aqui:

public ClienteDAO(Context ctx){
		this.ctx = ctx;
}

Perfeito, é isso ai, caso consiga resolver teu problema, coloca RESOLVIDO no topico pra saber que já tá tudo ok :smiley:

Vou fazer o que disse e posto o resultado.

kmunga, tira essa linha também:

public class ClienteDAO {
	
	private SQLiteDatabase db; // Essa aqui
	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"};