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;
}