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

Lista não aparece

Depois da implementação do banco de dados, minha lista não aparece mais. O formulário está funcionando numa boa, mas a lista...

Meu banco de dados tá assim:

imports...

public class AlunoDAO extends SQLiteOpenHelper {

    public AlunoDAO(Context context) {
        super(context, "Agenda", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, matricula TEXT, site TEXT, nota REAL);";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXISTS Alunos";
        db.execSQL(sql);
        onCreate(db);
    }

    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = pegaDadosDoAluno(aluno);

        db.insert("Alunos", null, dados);
    }

    @NonNull
    private ContentValues pegaDadosDoAluno(Aluno aluno) {
        ContentValues dados = new ContentValues();
        dados.put("nome", aluno.getNome());
        dados.put("matricula", aluno.getMatricula());
        dados.put("telefone", aluno.getTelefone());
        dados.put("site", aluno.getSite());
        dados.put("nota", aluno.getNota());
        return dados;
    }

    public List<Aluno> buscaAlunos() {
        String sql = "SELECT * from Alunos;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);

        List<Aluno> alunos = new ArrayList<>();
        while(c.moveToNext()){
            Aluno aluno = new Aluno();
            aluno.setId(c.getLong(c.getColumnIndex("id")));
            aluno.setNome(c.getString(c.getColumnIndex("nome")));
            aluno.setMatricula(c.getString(c.getColumnIndex("matricula")));
            aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
            aluno.setSite(c.getString(c.getColumnIndex("site")));
            aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }

    public void deleta(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        String[] params = {aluno.getId().toString()};
        db.delete("Alunos", "id = ?", params);
    }
}

Já troquei de emulador, coloquei num Android mais novo (o mesmo usado nas aulas) e nada de funcionar... Alguém pode me ajudar?

4 respostas

Olá Fabrício, tudo bem?

Analisando seu código do Dao me parece que está tudo certo com o método busca Alunos, você poderia compartilhar seu projeto para que eu tente assim analisar em mais detalhes o que pode ser?

Abs

Ta aqui nesse repositório:

https://github.com/richardnikolas/Agenda-AndroidStudio/

solução!

Olá Fabricio,

Após analisar seu código acredito que o problema esteja na linha

CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, matricula TEXT, site TEXT, nota REAL)

No método insere estamos tentando inserir o campo telefone, porém esse campo telefone não está presente no CREATE TABLE, tente alterar seu código acima para:

CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, matricula TEXT, site TEXT, nota REAL, telefone TEXT);

Depois disso, tente desinstalar sua aplicação e rodá-la novamente.

Espero que funcione!

Abs

Vou passar a te chamar de Rafael OLHOS DE ÁGUIA! Agora ficou perfeito, era realmente só isso que tava faltando.

Muito obrigado, Rafael Eagle Eye