Forum Pplware

Versão Completa: Problemas com Android
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Olá pessoal, sou programador em Delphi e estou começando agora com Android.
E naum consigo chamar uma classe que criei para acessar o banco de dados a partir da minha Activity principal.
se alguem poder me ajudar, agradeço muito. Naum sei mais o que fazer.

Classe criada:

package br.com.mkl.navegandotelas;

import android.app.AlertDialog;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.text.Editable;

public class MKLBD {
    
String bdnome = "base001";
Cursor tbClientes;
SQLiteDatabase banco;
AlertDialog.Builder mensagem;
Context context;

 
public MKLBD(Context context){
this.context = context;

mensagem = new AlertDialog.Builder(null);

}

public void CriaOuAbreBanco(){

String sql;

sql = "CREATE TABLE IF NOT EXISTS Clientes ( numero INTEGER PRIMARY KEY, "
+ "nome TEXT, endereco TEXT, bairro TEXT, fone TEXT, fone2 TEXT )";

try{

 banco = SQLiteDatabase.openOrCreateDatabase(bdnome, null);
 banco.execSQL(sql);
 
 tbClientes = banco.query("Clientes", null, null, null, null, null, null);
 
 tbClientes.moveToFirst();
 

        } catch(SQLException erro){
           
ExibeMsg("Erro ao criar Banco ! "+erro);

   }
 
}

public void ExibeMsg(String Mensagem){
   mensagem.setMessage(Mensagem);
   mensagem.setNeutralButton("OK", null);
mensagem.show();
}

public void Inserir(Editable nome, Editable enderco, Editable bairro, Editable fone, Editable fone2){
String sql;
int num;
num = RecNo();
num++;

sql = "INSERT INTO Clientes(numero, nome, endereco, bairro, fone, fone2)" +
 " VALUES ("+num+", "+nome+", "+enderco+", "+bairro+", "+fone+", "+fone2+")";

try {
  banco.execSQL(sql);
  ExibeMsg("Registro salvo com sucesso!!!");
}
catch(Exception erro){
ExibeMsg("Erro ao salvar registro !"+erro);
}
}





public int RecNo(){
         int Num;
try{

Num = tbClientes.getCount();
return Num;
}
catch (Exception erro){
ExibeMsg("Erro ao contar registros ! "+erro);
return 0;
}

}

}



Chamada na Activity:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

dados = new MKLBD(this);
dados.CriaOuAbreBanco();



Ai apresenta a erro e não roda o programa.
Obrigado pessoal!!
estou a ver assim à partida alguns erros que devias corrigir. primeiro, a rotina de criação da base de dados deveria estar numa classe à parte, e os métodos de acesso deveriam estar noutra.
Algo do género:

Classe de criação das tabelas:

Código:
public class DatabaseHelper extends SQLiteOpenHelper {

//declarar aqui constantes necessarias


//construtor
public DatabaseHelper (Context context) {
super(context, NOME_DA_BD, null, VERSAO_DA_BD);
}


@Override
public void onCreate(SQLiteDatabase database) {
//aqui vai a rotina de criacao da bd
}


@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion,int newVersion) {
//rotina de alteracao da bd em caso de upgrade da versao, de modo a nao haver problemas  numa futura atualização da app
}

}

Classe de acesso à bd

Código:
public class DatabaseAccess {

private DatabaseHelper dbHelper = null;

//construtor
private DatabaseAccess(Context context) {
dbHelper = new DBHelper(context);
}

//aqui declaras os metodos para fazer os acessos
//deixo aqui um exemplo


public String getXpto(){
String xpto = null;
SQLiteDatabase database = dbHelper.getReadableDatabase();
Cursor cursor;
try{
cursor = database.query(/** aqui metes o que for necessario**/);
if(cursor.moveToFirst()){
xpto = cursor.getString(0);
}
}catch(Exception e){
} finally{
cursor.close();
database.close();
}
return xpto;
}
}

[font=Verdana, Arial, sans-serif]Metodo de usagem na activity:[/font]


Código:
DatabaseAccess db = new DatabaseAccess(getAplicationContext());

String xpto = db.getXpto();

Aqui esta um exemplo muito simples de como comecar. O resto acho que teras de explorar por tua conta e risco. Existem diversas maneiras de aprimorar tudo, e conseguir alta performance no acesso. 
Atencao: nunca fazer acesso a bd na main thread! 
OK. Obrigado, vou tentar fazer isso meu amigo!
Funcionou. Muito obrigado amigo.

Resolvido!
de nada Smile lembra-te que deves fazer sempre o acesso à bd através de Threads. Existe documentação muito completa acerca do assunto em developer.android.com 
URL's de Referência