Inserir dados no Banco

5 respostas
S

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

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

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

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

activity_grupos.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#000000" >


    <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>

</LinearLayout>

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?

5 Respostas

S

Alguma sugestão?

tiagoemerick

Qual mensagem de erro está dando?

De qualquer modo na sua BaseDAO, linha 40:

Tenta isso:

Diferença: getWritableDatabase()

S

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?

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

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.

S

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

Criado 11 de novembro de 2012
Ultima resposta 12 de nov. de 2012
Respostas 5
Participantes 3