Solucionado (ver solução)
Solucionado
(ver solução)
11
respostas

Dúvida na Aula 5 - Persistência com SQLite

Pessoal, meu aplicativo não roda depois do momento que implemento o banco de dados (na primeira vez que o professor tenta compilar o app).

Quando eu tento gravar algum aluno ele manda a seguinte mensagem e fecha o app: "Infelizmente o "CadastroCaelum" parou".

O meu código está exatamente igual ao o do professor. Onde pode estar o erro? Estou usando o Android virtual Studio e já troquei de simulador e não resolveu.

11 respostas

Boa tarde Otávio!

Colaca o codigo de sua activity e seu DAO, pra gente ver o que pode esta errado

Código da DAO


package br.ufc.otavioguerra.dao;


import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import br.ufc.otavioguerra.modelo.Aluno;

public class AlunoDAO extends SQLiteOpenHelper{


    private static final String DATABASE = "NomeDoBanco";
    private static final int VERSAO = 2 ;
    private static final String TABELA = "Alunos";

    public AlunoDAO(Context ctx) {
        super(ctx, DATABASE, null, VERSAO);

    }

    @Override
    public void onCreate(SQLiteDatabase database) {

       String sql = "CREATE TABLE " + TABELA + " ("
                + "id INTEGER PRIMARY KEY, "
                + "nome TEXT UNIQUE NOT NULL, "
                + "telefone TEXT, "
                +"endereco TEXT, "
                +"site TEXT, "
                +"nota REAL, "
                +"caminhoFoto TEXT, "
                +");";

        database.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {

        String sql = "DROP TABLE IF EXISTS " + TABELA;
        database.execSQL(sql);
        onCreate(database);



    }

    public void insere(Aluno aluno) {

       ContentValues cv =  new ContentValues();
        cv.put("nome", aluno.getNome());
        cv.put("telefone", aluno.getTelefone());
        cv.put("endereco", aluno.getEndereco());
        cv.put("site", aluno.getSite());
        cv.put("nota", aluno.getNota());
        cv.put("caminhoFoto", aluno.getCaminhoFoto());

        getWritableDatabase().insert(TABELA,null,cv);



    }
}

Código da Activity do formulário

package br.ufc.otavioguerra.cadastrocaelum;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import br.ufc.otavioguerra.dao.AlunoDAO;
import br.ufc.otavioguerra.modelo.Aluno;

public class FormularioActivity extends Activity {


    private   FormularioHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.formulario);


        Button botao = (Button) findViewById(R.id.botao);
        helper = new FormularioHelper(this);




        botao.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Toast.makeText(FormularioActivity.this, "Voce clicou no botao",
                        Toast.LENGTH_LONG).show();

                  Aluno aluno = helper.pegaAlunoDoFormulario();

                AlunoDAO dao = new AlunoDAO(FormularioActivity.this);
                dao.insere(aluno);
                dao.close();



                finish();
            }
        });
    }



    }

quando ocorre o erro quando abre a aplicação, ou quando vc clica no Novo?

so pra adiantar ta faltando o ; na String no drop

String sql = "DROP TABLE IF EXISTS " + TABELA;

Aparece o erro quando eu termino de preencher o formulário no app e aperto no botão "gravar".

E não não está faltando ; onde você indicou...

Mas no código que vc postou está.

Sua string deveria estar assim String sql = "DROP TABLE IF EXISTS " + TABELA+";";

Mas faz assim coloca um breakpoint no onclicklistener do botão gravar e verifica onde exatamente está quebrando?

Resolvi o problema da pontuação mas o problema continua...

Vou tentar a dica dos breakpoints. Retorno assim que obtiver alguma informação...

solução!

Boa noite Otávio,

Aparentemente tem uma vírgula a mais no seu SQL de criação do banco de dados depois do "caminhoFoto TEXT". A instrução deve ficar assim:

String sql = "CREATE TABLE " + TABELA + " ("
                + "id INTEGER PRIMARY KEY, "
                + "nome TEXT UNIQUE NOT NULL, "
                + "telefone TEXT, "
                +"endereco TEXT, "
                +"site TEXT, "
                +"nota REAL, "
                +"caminhoFoto TEXT"
                +");";

Se isso ainda não resolver, verifique a saída do LogCat no próprio Android Studio, procure por alguma exceção que possa ter sido lançada e poste-a aqui para tentarmos encontrar o problema.

Abraço!

Boa Jéferson,

Provavelmente e isso.

Valeu Jeferson! Agora posso continuar o curso, muito obrigado a todos que ajudaram de alguma forma...