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

Erro ao listar

Após inserir um Aluno, a aplicação para de funcionar, ao debuggar, vi que ele para no metódo populaAlunos, mais precisamento entre essas linhas:

while(c.moveToNext()){
            Aluno aluno = new Aluno();
            aluno.setId(c.getString(c.getColumnIndex("id")));
--- Resto do Código ---
}

ERRO:

Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

Mas tenho essa informação antes:

Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 7 columns.

Restante dos Códigos:

private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();

        for (Aluno aluno :
                alunos) {
            Log.i("id do aluno", String.valueOf(aluno.getId()));
        }

        dao.close();

        AlunosAdapter adapter = new AlunosAdapter(this, alunos);
        listaAlunos.setAdapter(adapter);
    }
    public List<Aluno> buscaAlunos() {
        String sql = "SELECT * FROM alunos;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);
        List<Aluno> alunos = populaAlunos(c);
        c.close();
        return alunos;
    }

    @NonNull
    private List<Aluno> populaAlunos(Cursor c) {
        List<Aluno> alunos = new ArrayList<Aluno>();
        while(c.moveToNext()){
            Aluno aluno = new Aluno();
            aluno.setId(c.getString(c.getColumnIndex("id")));
            aluno.setNome(c.getString(c.getColumnIndex("nome")));
            aluno.setEmail(c.getString(c.getColumnIndex("email")));
            aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
            aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
            aluno.setSite(c.getString(c.getColumnIndex("site")));
            aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
            aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));

            alunos.add(aluno);
        }
        return alunos;
    }
4 respostas

Não seria o case do select de alunos?

No caso, vi no tópico anterior que você mudou de "alunos" para "Alunos" na mudança de versão do banco e na pesquisa você está dando "select * from alunos", sem uppercase no A.

Mesmo acreditando que não mudaria em nada, mudei o sql para Alunos, e continuou o erro.

Para testar se estava inserindo mesmo, realizei um return no insert, e está inserindo, então acho que o erro está mesmo no listar

Bom, tirando o detalhe do alunos que falei não vejo nada de errado. O ideal seria então debugar a aplicação e ver o que ele retorna na busca antes de iterar.

solução!

Consegui fazer funcionar refazendo os módulos do curso desde que surgiu o erro.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software