Inserir dados no Banco

Pessoal,

Estou tentando gravar a informação de um alertDialog no Banco de Dados, mas não estou conseguindo
package com.example.agenda;

BaseDAO.java

[code]import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

//Classe responsável pela criação do Banco de Dados e tabelas

public class BaseDAO extends SQLiteOpenHelper {
public static final String TBL_GRUPOS = “Grupos”;
public static final String GRUPOS_ID = “_id”;
public static final String GRUPOS_NOME = “nome”;
private static final String DATABASE_NAME = “agenda.db”;
private static final int DATABASE_VERSION = 1;
//private final Context context;

//Estrutura da tabela Agenda (sql statement)
private static final String CREATE_GRUPOS = "create table " +
TBL_GRUPOS + “( " + GRUPOS_ID + " integer primary key autoincrement, " +
GRUPOS_NOME + " text not null)”;
private Context contexto;

public BaseDAO(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
//Criação da tabela
database.execSQL(CREATE_GRUPOS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Caso seja necessário mudar a estrutura da tabela
//deverá primeiro excluir a tabela e depois recriá-la
db.execSQL("DROP TABLE IF EXISTS " + TBL_GRUPOS);
onCreate(db);
}

public long InserirGrupo(String nome) {
SQLiteDatabase db = getReadableDatabase();

try {  
    ContentValues initialValues = new ContentValues();  
    initialValues.put("nome", nome);  
    
  
    return db.insert("Grupos", null, initialValues);  
} finally {  
    db.close();  
}

}

public void mensagem(String msg) {
Toast t = Toast.makeText(this.contexto, msg, Toast.LENGTH_LONG);
t.show();
}
}[/code]

Grupos.java (está cheio de comentários porque tentei fazer de diversas formas. rsrs)

[code]package com.example.agenda;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class Grupos extends Activity {

public static final int Voltar = 0;
Intent it;

private SQLiteDatabase db;

private CursorAdapter dataSource;
BaseDAO helper;

private static final String campos[]={“nome”,"_id"};

Button btnGroup;
EditText txtNome;

ListView listView;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_grupos);

    helper = new BaseDAO(this);

// db = helper.getReadableDatabase();

listView = (ListView) findViewById(R.id.listView1);    

// txtNome = (EditText) findViewById(R.id.grupos);
btnGroup = (Button) findViewById(R.id.btn_addGroup);
// btnGroup.setOnClickListener(this);

}

// public void onClick(View v){
// Toast.makeText(this,“Testando”,Toast.LENGTH_SHORT).show();

//CadastrarGrupo();
	//listar();
//	limpaCampos(txtNome);
//	Cursor grupos = db.query("Grupos",null,null,null,null,null,null);
//	if (grupos.getCount()>0){
		
//	Toast.makeText(this,grupos.getCount(),Toast.LENGTH_SHORT).show();	
//	dataSource = new SimpleCursorAdapter(this,R.layout.modelo_lista,grupos,campos,new int[]{R.id.tv1,R.id.tv2});

// listView.setAdapter(dataSource);
// }

public void CadastrarGrupo()    {  
	//   helper = new BaseDAO(this);
	    
	//   db = helper.getReadableDatabase();
  BaseDAO helper = new BaseDAO(this);
   helper.InserirGrupo(txtNome.getText().toString());
   helper.mensagem("Dados gravados") ;  
	    
}

public void listar(){
	
//	ContextoDados b = new ContextoDados(this);
	
	
	Cursor grupos = db.query("Grupos",campos,null,null,null,null,null);
	if (grupos.getCount()>0){
	//dataSource = new SimpleCursorAdapter(this,R.layout.modelo_lista,grupos,campos,new int[]{R.id.tv1,R.id.tv2});
	
	listView.setAdapter(dataSource);
	
	} else {
	
		Toast.makeText(this,"Nenhum registro encontrado",Toast.LENGTH_SHORT).show();
	}
}
	
public void limpaCampos(EditText txtnome){
	
	txtnome.setText("");
	
	
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_grupos, menu);
    menu.add(0,Voltar,0,"Voltar");
    return true;
}
public boolean onMenuItemSelected(int featureId, MenuItem item){
    switch (item.getItemId()) {
   
    case Voltar:
    it = new Intent(this,Inicial.class);
    	startActivity(it);
    	finish();
    return true;

}
return false;
}
public void btnGrupo_click(View v)
{
//Cria o AlertDialog
AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("Grupo");  
    //alert.setMessage("Message");  

    //Cria uma caixa de texto para ser inserida dentro do AlertDialog   
    final EditText input = new EditText(this);  
    alert.setView(input);  

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
        	 helper.InserirGrupo(input.getText().toString());
        	 helper.mensagem("Dados Gravados");
        	
            //  lsEstados.add(String.valueOf(input.getText()));  
              //adapter.notifyDataSetChanged();  
        }  
    });  

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
            //Cancelado.  
        }  
    });  

    alert.show();      
}  

}[/code]

activity_grupos.xml

[code]

<Button
    android:id="@+id/btn_addGroup"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Adicionar Grupo"
    android:onClick="btnGrupo_click"
    
     />



<ListView 
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    
    ></ListView>

[/code]

No clique do botão Ok do AlertDialog estou chamando o banco de dados e o método inserir grupo, mas dá o erro force close e fecha minha aplicação.

o que será que eu errei?

Alguma sugestão?

Qual mensagem de erro está dando?

De qualquer modo na sua BaseDAO, linha 40:

Tenta isso:

Diferença: getWritableDatabase()

Mas qual a diferença?

Tentei mudar aqui e não funcionou.

Será que o problema não está aqui?

private SQLiteDatabase db; private CursorAdapter dataSource; BaseDAO helper;

Na classe Grupos eu declaro essas variáveis, mas não seria o certo instanciá-las diretamente dentro do evento do botão ok?

[code]public void btnGrupo_click(View v)
{

    //Cria o AlertDialog    
    AlertDialog.Builder alert = new AlertDialog.Builder(this);    

    alert.setTitle("Grupo");    
    //alert.setMessage("Message");    

    //Cria uma caixa de texto para ser inserida dentro do AlertDialog     
    final EditText input = new EditText(this);    
    alert.setView(input);    

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {    
        public void onClick(DialogInterface dialog, int whichButton) {  

BaseDAO helper = new BaseDAO(this);

             helper.InserirGrupo(input.getText().toString());  
             helper.mensagem("Dados Gravados");  
              
            //  lsEstados.add(String.valueOf(input.getText()));    
              //adapter.notifyDataSetChanged();    
        }    
    });    

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {    
        public void onClick(DialogInterface dialog, int whichButton) {    
            //Cancelado.    
        }    
    });    

    alert.show();        
}    

[/code]

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase()

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getReadableDatabase()

Leia a documentação. Você quer inserir dados abrindo a base para leitura. Isso pode não ter resolvido seu problema atual, mas resolveu um problema que você iria ter no futuro.

Entendi. Obrigado.

O erro na verdade aparece quando eu chamo um método da classe BaseDAO de dentro da classe Grupos. O problema está no