7
respostas

Erro no cursor

Ja copiei o codigo baixado do site. Mas o problema no cursor persiste. Não consigo identificar.

7 respostas

Oi Caio, tudo bem ?

Cara passa para gente a exception ?

Tudo bem sim Matheus e por ai? primeiro ele da esta exception: E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 6 columns.

e depois para nesta:

https://pastebin.com/2nBSCDhU

Fala ai Caio, posta o código do seu DAO para darmos uma olhada, fica mais fácil ajuda-lo.

A principio, o problema parece ser no seu cursor, algo relacionado com a inicialização dele.

Opa! está aqui

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, endereco TEXT, telefone 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 = new ContentValues();
        dados.put("nome", aluno.getNome());
        dados.put("endereco", aluno.getEndereco());
        dados.put("telefone", aluno.getTelefone());
        dados.put("site", aluno.getSite());
        dados.put("nota", aluno.getNota());
        db.insert("Alunos", null, 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.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")));
            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }
}

agora arrumei um aparelho android para testar e esta funcionando. Estava utilizando o emulador na versão API23. O aparelho tem android 7

Acho que se você desinstalar do emulador e reinstalar o erro não vai mais existir.

Provavelmente você deve ter rodado com algum problema na criação da tabela, corrigiu depois e a versão continuou como 1.

Fala ai Caio, ja tive problemas com a API 23, tenta mudar para a API 26 e Android 8, deve resolver o problema.