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

Android não está instanciando novos objetos.

Olá. Estou com um problema muito estranho. No looping onde eu monto a List dos alunos que busquei na tabela, o objeto Aluno é criado apenas uma vez e reutilizado, mesmo eu instanciando ele novamente.

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

        List<Aluno> alunos = new ArrayList<Aluno>();

        while (c.moveToNext()) {

            Aluno aluno = new Aluno(); // esse objeto é instanciado apenas uma vez! Ajudem!!!

            aluno.setId(c.getLong(c.getColumnIndex("ID")));
            aluno.set_nome(c.getString(c.getColumnIndex("NOME")));
            aluno.set_endereco(c.getString(c.getColumnIndex("ENDERECO")));
            aluno.set_telefone(c.getString(c.getColumnIndex("TELEFONE")));
            aluno.set_site(c.getString(c.getColumnIndex("SITE")));
            aluno.set_nota(c.getFloat(c.getColumnIndex("NOME")));

            alunos.add(aluno);
        }

        c.close();
        return alunos;
    }

Quanto começo a debugar o projeto, tenho 3 registros no banco de dados. O primeiro é associado ao Objeto 'aluno' sem nenhum problema, mas na segunda iteração, o android não instancia um novo objeto aluno, mas continua utilizando o mesmo, substituindo os valores do 1° registro pelo segundo, e assim sucessivamente, listando no ListView principal apenas o ultimo registros diversas vezes.

Alguem sabe o por quê do Android não estar instanciando um novo objeto aluno ao invez de usar o mesmo?

2 respostas

Olá Arthur,

Realmente essa parte do código parece estar correta, você poderia postar essa classe inteira e também a Activity que contém a sua lista?

Enquanto isso, tente fazer um clean e um rebuild completo (menu Build) no seu projeto. Talvez ele esteja executando algum APK antigo e não o código que está sendo exibido na IDE.

solução!

Acabei encontrando a solução. Por algum motivo, os atributos da classe alunos foram criados como Static.

private long _ID;
    private static String _nome;
    ...
    private static float _nota;

Apenas removi isso e o código funcionou perfeitamente.

Obrigado!