Tecnologia do Blogger.
RSS

[androidbrasil-dev] Erro banco de dados

Olá pessoal, estou precisando da ajuda de vocês.

Tenho 3 classes. Uma tela1 (CaptureActivity) que contém um botão para
acrescentar quantidade. Uma classe(BancoDados) responsável pelas
operações no banco de dados e uma outra tela2(ContEstoActivity) que
faz outras operações. A minha tela2 chama a tela1 esperando um
resultado (uma string e um valor inteiro), quando esse resultado chega
ele insere esses dados no banco de dados, isso funciona normalmente.
Porém, quando é pressionado o botão de acrescentar quantidade
(presente na tela 1) chama uma função da tela2. Esta função pegaria a
ultima string inserida no banco e adicionaria um novo valor inteiro,
porém acontece uma exceção JavaNullPointerException na hora de abrir o
banco de dados sendo que utilizo uma única função para inserir no
banco. Segue os códigos fonte:

public class BancoDados {
private static final String NOMEBANCO = "Contador";
private static final String TABELA = "Produto";
final String criaTabela = "CREATE TABLE IF NOT EXISTS Produto("
+ "codigoBarra TEXT PRIMARY KEY,"
+ "descricao TEXT,"
+ "quantidade INTEGER NOT NULL" + ");";
public SQLiteDatabase database;

public BancoDados(Context _contexto){
try {
database = _contexto.openOrCreateDatabase(NOMEBANCO,
Context.MODE_PRIVATE, null);
database.execSQL(criaTabela);
} catch (Exception e) {
e.printStackTrace();
}
}

public BancoDados(){
}

public void inserirProduto (String codigo, int quantidade){
if (database==null){
Log.i(null, "Banco dados: Erro ao abrir o banco");
}
else{
ContentValues produto = new ContentValues();
Cursor resultado = buscarProduto(codigo);
if(resultado.getCount()>0){
resultado.moveToFirst();
//Log.i(null, "Resultado: "+resultado.getString(0));
database.execSQL("UPDATE Produto SET quantidade ="+(quantidade
+resultado.getInt(1))+" WHERE codigoBarra =\""+codigo+"\"");
}
else{
produto.put("codigoBarra", codigo.toString());
produto.put("descricao", "oi");
produto.put("quantidade", quantidade);
database.insert(TABELA, null, produto);
database.close();
}
}
}

public Cursor buscarProduto(String _codigo){
Cursor cursor = database.query(TABELA, new String[]
{"codigoBarra","quantidade"}, "codigoBarra = \""+ _codigo+"\"", null,
null, null, null);
//Log.i(null, "Achou produto: "+cursor.getString(0));
return cursor;
}

public void lista (){
Cursor c = database.query(TABELA, new String[]
{"codigoBarra","quantidade"}, null, null, null, null, null);
if (c.getCount()>0){
c.moveToFirst();
for(int i = 0;i<c.getCount();i++){
Log.i(null, "O Produto: "+c.getString(0)+" A Quantidade:
"+c.getInt(1));
c.moveToNext();
}
}
database.close();
}
}

// Estas classes contem partes cortadas, pois acredito que não ajudará
para resolver o problema e para reduzir o tamanho do post

public final class CaptureActivity extends Activity implements
SurfaceHolder.Callback {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//tem mais coisa aqui
btnAcrescentar = (Button) findViewById(R.id.aumentar_quantidade);
edtQuantidade = (EditText) findViewById(R.id.quantidade);
btnDiminuir = (Button) findViewById(R.id.diminuir_quantidade);

edtQuantidade.setOnKeyListener(new OnKeyListener() {

@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
if(edtQuantidade.getText().toString().equals("0")){
edtQuantidade.setText("1");
}
return false;
}
});
btnAcrescentar.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
ContEstoActivity contador = new ContEstoActivity();

contador.acrescentarQuantidade(Integer.parseInt(edtQuantidade.getText().toString()));
}
});

}

public class ContEstoActivity extends Activity{
/** Called when the activity is first created. */
public static String ultimoProduto = "789115000";


public void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {

//trecho de código que cria e atribui os
valores às variáveis contents e quantidade


insereBanco(contents.toString(),Integer.parseInt(quantidade.toString()));
startActivityForResult(intent, 0);

} else if (resultCode == RESULT_CANCELED) {
listar();
Toast.makeText(this, "Não Leu o Código.",
Toast.LENGTH_LONG).show();
}
}
}

public void insereBanco (String cod, int quant){
BancoDados banco = new BancoDados(this);
ultimoProduto = cod.toString();
Log.i(null,"UltimoProduto "+ultimoProduto.toString());
banco.inserirProduto(cod.toString(), quant);
}

public void acrescentarQuantidade(int _quantidade){
Log.i(null,"aqui chegou "+_quantidade);
if(ultimoProduto.equals("")==true){
Log.i(null,"Aqui Nao tem produto lido");
}
else{
BancoDados bd = new BancoDados(this);

Log.i(null,"UltimoProduto add "+ultimoProduto.toString());
//insereBanco("7891150003187", 3);
bd.inserirProduto("7891150003187", 3);
}
}

public void listar (){
BancoDados bd = new BancoDados(this);
bd.lista();
}


}


Log Cat
01-03 15:18:37.989: D/CameraManager(957): Calculated framing rect:
Rect(60, 30 - 420, 265)
01-03 15:18:39.179: I/(957): aqui chegou 1
01-03 15:18:39.179: W/System.err(957): java.lang.NullPointerException
01-03 15:18:39.179: W/System.err(957): at
android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:
203)
01-03 15:18:39.179: W/System.err(957): at
br.android.contador.database.BancoDados.<init>(BancoDados.java:20)
01-03 15:18:39.179: W/System.err(957): at
br.android.contador.ContEstoActivity.acrescentarQuantidade(ContEstoActivity.java:
106)
01-03 15:18:39.179: W/System.err(957): at
com.google.zxing.client.android.CaptureActivity
$3.onClick(CaptureActivity.java:201)
01-03 15:18:39.179: W/System.err(957): at
android.view.View.performClick(View.java:2485)
01-03 15:18:39.179: W/System.err(957): at android.view.View
$PerformClick.run(View.java:9080)
01-03 15:18:39.179: W/System.err(957): at
android.os.Handler.handleCallback(Handler.java:587)
01-03 15:18:39.179: W/System.err(957): at
android.os.Handler.dispatchMessage(Handler.java:92)
01-03 15:18:39.179: W/System.err(957): at
android.os.Looper.loop(Looper.java:130)
01-03 15:18:39.179: W/System.err(957): at
android.app.ActivityThread.main(ActivityThread.java:3687)
01-03 15:18:39.179: W/System.err(957): at
java.lang.reflect.Method.invokeNative(Native Method)
01-03 15:18:39.179: W/System.err(957): at
java.lang.reflect.Method.invoke(Method.java:507)
01-03 15:18:39.189: W/System.err(957): at
com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:867)
01-03 15:18:39.189: W/System.err(957): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
01-03 15:18:39.189: W/System.err(957): at
dalvik.system.NativeStart.main(Native Method)
01-03 15:18:39.189: I/(957): UltimoProduto add 789115000
01-03 15:18:39.189: I/(957): Banco dados: Erro ao abrir o banco
01-03 15:18:44.139: I/(957): O Produto: 7622300271817 A Quantidade: 1
01-03 15:18:44.149: I/(957): O Produto: 9788575222447 A Quantidade: 15

Qualquer ajuda, sugestão, crítica é muito bem vinda.

Obrigado.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário