"close() was never explicitly " banco android

4 respostas
T

boa noite, está dando esse erro ao executar o metodo update

alguem pode me ajudar??

package com.tedesco.controlefinanceiro;

import java.util.ArrayList;
import java.util.List;

import com.actionbarsherlock.ActionBarSherlock;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

import android.R;
import android.R.integer;
import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Handler;
import android.app.AlertDialog;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.Button; 
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class Activity_cup extends SherlockActivity {
	SQLiteDatabase bancoDados = null;
	SQLiteDatabase bancoDado = null;
	Cursor cursor;
	String nomeBanco = "tedesco.controlefinanceiro";
	SimpleCursorAdapter dataSource;
	List lstcup = new ArrayList();
	String id;
	int tela;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(com.tedesco.controlefinanceiro.R.layout.activity_cup);
		Intent intent = getIntent();
		Bundle params = intent.getExtras();  
		//Log.d("teste",params.getInt("mensagem"));
		EditText nome       = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_nomeraz);
		
		//selecionarDados();
		

		tela = params.getInt("tela");
		if (tela==1){
			id   = params.getString("id");
			Alteracao(id);
			cursor= null;

		}
	}
	


private void Alteracao(String id) {
	// TODO Auto-generated method stub

	
	
	bancoDados = openOrCreateDatabase(nomeBanco, MODE_PRIVATE, null);
	cursor = bancoDados.rawQuery("select id as _id, nome_raz_social, tipo_pessoa, cnpj,telefone,tipo from TB_CUP where _id="+id, null);
	cursor.moveToFirst();
	
	EditText nome       = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_nomeraz);
	Spinner tipo_pessoa = (Spinner) findViewById(com.tedesco.controlefinanceiro.R.id.sp_tpessoa);
	EditText telefone   = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_tel);
	EditText cnpjcpf    = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_cpfcnpj);
	nome.setText(cursor.getString(cursor.getColumnIndex("nome_raz_social")));
	telefone.setText(cursor.getString(cursor.getColumnIndex("telefone")));
	cnpjcpf.setText(cursor.getString(cursor.getColumnIndex("cnpj")));

}	
public void selecionarDados(){
try
{
	bancoDados = openOrCreateDatabase(nomeBanco, MODE_PRIVATE, null);
	
	cursor = bancoDados.rawQuery("select id as _id, nome_raz_social, tipo_pessoa,telefone,tipo from TB_CUP", null);
	String[] from ={"_id","nome_raz_social","telefone"};
	
    cursor.moveToFirst();
    int i=0;
    while (!cursor.isAfterLast()) {
    	
    	lstcup.add(cursor.getString(0));
        cursor.moveToNext();
        i++;
}
	}finally{
		bancoDados.close();
		cursor.close();
    }
	
}

        	

public void Update(){
	try
	{
	

		bancoDado = openOrCreateDatabase(nomeBanco, MODE_PRIVATE, null);
		String _id = String.valueOf(id);
		
		EditText nome       = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_nomeraz);
		Spinner tipo_pessoa = (Spinner) findViewById(com.tedesco.controlefinanceiro.R.id.sp_tpessoa);
		EditText telefone   = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_tel);
		EditText cnpjcpf    = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_cpfcnpj);
		cursor = bancoDado.rawQuery("update tb_cup set nome_raz_social='"+nome.getText().toString()+"',tipo_pessoa='"+tipo_pessoa.getSelectedItem().toString()+
		"',telefone='"+telefone.getText().toString()+"',cnpj='"+cnpjcpf.getText().toString()+"' where id="+id, null);
	} finally
			{
				bancoDado.close();
				cursor.close();
			}
}


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(com.tedesco.controlefinanceiro.R.menu.save, menu);
        return super.onCreateOptionsMenu(menu);
    }
    
    public boolean onOptionsItemSelected(MenuItem item) {

		
        switch (item.getItemId()) {
        case com.tedesco.controlefinanceiro.R.id.save:
    		if (tela==0){
    			InsertCup();
    		}
    		else
    		{
    			Update();
    		}
           return true;
        default:
            return super.onOptionsItemSelected(item);
        }


}
    public void InsertCup(){
 
    	SQLiteDatabase bancoDados = null;
    	Cursor cursor;
    	String nomeBanco = "tedesco.controlefinanceiro";
    	bancoDados = openOrCreateDatabase(nomeBanco, MODE_PRIVATE, null);
    	String texto = "Registro Inserido com Sucesso";
    	int duracao = Toast.LENGTH_SHORT;
    	
    	EditText nome       = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_nomeraz);
    	Spinner tipo_pessoa = (Spinner) findViewById(com.tedesco.controlefinanceiro.R.id.sp_tpessoa);
    	EditText telefone   = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_tel);
    	EditText cnpjcpf    = (EditText) findViewById(com.tedesco.controlefinanceiro.R.id.edt_cpfcnpj);
     try {
    	     	 	
    		ContentValues initialValues = new ContentValues();
    		initialValues.put("nome_raz_social", nome.getText().toString());
    		initialValues.put("tipo_pessoa", tipo_pessoa.getSelectedItem().toString());
    		initialValues.put("telefone", telefone.getText().toString());
    		initialValues.put("cnpj", cnpjcpf.getText().toString());
    		bancoDados.insert("tb_cup", null, initialValues);
    		
    		Toast.makeText(getApplicationContext(), texto, Toast.LENGTH_SHORT).show();
    		
    		
    	} 
    	catch(Exception erro)
		   {
			   mensagemExibir("Erro", "Erro ao inserir registro: "+erro.getMessage());
		   }
    	
    }
	public void mensagemExibir(String titulo, String texto)
	   {
			AlertDialog.Builder mensagem = new AlertDialog.Builder(Activity_cup.this);
			mensagem.setTitle(titulo);
			mensagem.setMessage(texto);
			mensagem.setNeutralButton("OK",null);
			mensagem.show();

	   }
}

4 Respostas

saryoromulo

ele dá o erro mas não impede o funcionamento. Ele só está dizendo que você abriu o banco de dados, e deixou a conexão dele aberta…

pra não aparecer isso daí mais, dá um bancoDados.close(); depois de terminar de fazer tudo no banco.

btw, se vc não fizer também, o programa vai funcionar do mesmo jeito. Pelo menos nos meus tudo funciona mesmo com a mensagem.

T

saryoromulo:
ele dá o erro mas não impede o funcionamento. Ele só está dizendo que você abriu o banco de dados, e deixou a conexão dele aberta…

pra não aparecer isso daí mais, dá um bancoDados.close(); depois de terminar de fazer tudo no banco.

btw, se vc não fizer também, o programa vai funcionar do mesmo jeito. Pelo menos nos meus tudo funciona mesmo com a mensagem.

Bom dia, mas no meu ele da erro e fexa a aplicacao.

saryoromulo

hmmmm, mas tenho quase certeza que esse então não é o motivo de estar travando viu…

dei uma olhada melhor no seu método Update… não faz assim não, cara…

faz desse jeito:

bancoDado.execSQL(comando_do_update_aqui);

o rawQuery vc só usa mesmo pra alimentar o cursor trazendo um select… quando quiser rodar algum comando no banco usa esse execSQL aí que fica jóia.

outra coisa, recomendo vc criar umas funções padrões pra select, update e td mais… eu uso assim, daí só passo o sql como parametro pra ela e ela roda o rawquery ou entao o execsql…

se não der certo com essa mudança aí, tenta debugar o código e ve qual é a linha que dá o erro…

T

saryoromulo:
hmmmm, mas tenho quase certeza que esse então não é o motivo de estar travando viu…

dei uma olhada melhor no seu método Update… não faz assim não, cara…

faz desse jeito:

bancoDado.execSQL(comando_do_update_aqui);

o rawQuery vc só usa mesmo pra alimentar o cursor trazendo um select… quando quiser rodar algum comando no banco usa esse execSQL aí que fica jóia.

outra coisa, recomendo vc criar umas funções padrões pra select, update e td mais… eu uso assim, daí só passo o sql como parametro pra ela e ela roda o rawquery ou entao o execsql…

se não der certo com essa mudança aí, tenta debugar o código e ve qual é a linha que dá o erro…

Muito obrigado. deu certo com execSQL.

Criado 13 de junho de 2013
Ultima resposta 18 de jun. de 2013
Respostas 4
Participantes 2