Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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