2
respostas

Qual a diferença?

Tentei fazer assim:

    public List<Aluno> listaAlunos() {
        String sql = "SELECT * FROM Alunos;";
        SQLiteDatabase db = getWritableDatabase();
        Cursor c = db.rawQuery(sql,null);
        List<Aluno> lista = new ArrayList<Aluno>();
        while (c.moveToNext()){
            lista.add(new Aluno( //<<<<<<< NÃO FUNCIONOU
                    c.getLong(c.getColumnIndex("id")),
                    c.getString(c.getColumnIndex("nome")),
                    c.getString(c.getColumnIndex("endereco")),
                    c.getString(c.getColumnIndex("telefone")),
                    c.getString(c.getColumnIndex("email")),
                    c.getDouble(c.getColumnIndex("nota"))
            ));
        }
        c.close();
        return lista;
    }

E não funciona, mas assim:

public List<Aluno> listaAlunos() {
        String sql = "SELECT * FROM Alunos;";
        SQLiteDatabase db = getWritableDatabase();
        Cursor c = db.rawQuery(sql,null);
        List<Aluno> lista = new ArrayList<Aluno>();
        while (c.moveToNext()){
            Aluno aluno = new Aluno(
                c.getLong(c.getColumnIndex("id")),
                c.getString(c.getColumnIndex("nome")),
                c.getString(c.getColumnIndex("endereco")),
                c.getString(c.getColumnIndex("telefone")),
                c.getString(c.getColumnIndex("email")),
                c.getDouble(c.getColumnIndex("nota"))
            );
            lista.add(aluno); // <<<<< FUNCIONOU
        }
        c.close();
        return lista;
    }

Funciona! Qual a diferença?

O new Aluno() não retorna um objeto Aluno?

2 respostas

Deveria funcionar sim.. Qual o erro que deu? Só batendo o olho eu não vi diferença :(.

Oi Alberto!

Na primeira situação dentro do while o List recebe as instancias de Aluno sem declarar o objeto aluno. O app não abre e no Android Studio aparece isso: E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaadf0860

Na segunda situação eu primeiro declarei um objeto aluno e depois usei o .add() do List passando o objeto como argumento. Ai o app funcionou.