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

Lista não exibe alunos cadastrados

Olá!

Terminei aqui a Aula 4 e estou com o problema que aconteceu com alguns também, a Lista ela não é exibida na tela inicial do app. Mesmo antes de fazer a ultima parte da aula não estava aparecendo. Um dos erros que aparecia no Log era "Emulator: qemu-system-i386.exe: Unable to open" e ao pesquisar ele achei uma solução que basicamente era desabilitar a opção "Only for reading" pelas propriedades da pasta no Windows, mas isso não resolver, na verdade quando eu abro as propriedades da pasta de novo ele ta habilitado o "Only for reading" de novo, por algum motivo ele parece que não salva a alteração. Além disso quando criei minha Activity ela veio com alguns comandos como o toolbar que resolvi deixar, mas mesmo tirando ele não consegui funcionar.

Alguém pode me ajudar? Meu projeto no github para testarem: https://github.com/PhoenixBRnnf/AluraAgenda

Obrigado!

8 respostas

Guilherme, poste trechos do seu código aqui para que possamos ajudar. Fica mais rápido... pega a parte do AlunoDAO de "buscaAlunos" e a parte onde você cria o ArrayAdapter. Aproveita pra copiar os logs também, ajuda bastante ver o erro especifico.

Oi Rafaela!

Ok vou colar o código!

Essa é o "buscaAlunos" :

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

E aqui o ArrayAdapter:

    @Override
    protected void onResume() {
        super.onResume();
        carregaLista();
    }

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

        ListView listaAlunos = findViewById(R.id.lista_alunos);
        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);
    }

Na parte do Log eu entro no app pelo emulador, tento adicionar algum aluno, não aparece nada na Lista por mais que o Toast informe que cadastrou e quando fecho o emulador ele aparece o erro, como pode ver aqui:

15:19    Gradle build finished in 2s 370ms

15:20    Emulator: qemu-system-i386.exe: Unable to open C:\Users\guinh\.android\avd\Phoenix_Pixel_2_XL.avd\data\misc\pstore\pstore.bin: Permission denied

15:20    Emulator: Process finished with exit code 0

Mas acredito que todos códigos estão certos, só se eu não percebi algum erro pequeno, ele chega a compilar sem erros, só não funciona... O que pensei que poderia ser é problema com meu emulador mesmo, por isso passei o código no github para ver se alguém testando iria conseguir.

Qualquer coisa que precisar avise! Obrigado pela ajuda :)

Olhando pelo erro que está dando, tudo indica que você está sem permissão para rodar AVD... Você já rodou o emulador alguma outra vez? Se não, darei a dica que aconteceu comigo.

Quando rodei o emulador, ele abria, mas em seguida já fechava, dizendo que eu não tinha permissão para tal... resolvi meu problema habilitando a opção de AVD na própria BIOS do meu notebook, você pode tentar ver se é o mesmo problema (o que acho que é, pois ali ele já acusa "permission denied"), é só você habilitar a opção na BIOS e rodar novamente. Tenta e se não der, volte aqui que com certeza outras pessoas irão te ajudar também.

Então, a primeira vez que eu rodei o emulador no meu PC eu tive que ativar o AVD na BIOS também, passei por esse problema haha E eu consegui usar tudo do emulador depois disso, todas outras aulas eu ia fazendo e testando no emulador e tava indo normal, só depois que envolveu o banco de dados e tal que começou a aparecer esse erro e não aparecer nada na lista. Eu pesquisei no google esse Erro que deu no meu e aconteceu o que eu falei lá no primeiro post:

"ao pesquisar ele achei uma solução que basicamente era desabilitar a opção "Only for reading" pelas propriedades da pasta no Windows, mas isso não resolver, na verdade quando eu abro as propriedades da pasta de novo ele ta habilitado o "Only for reading" de novo, por algum motivo ele parece que não salva a alteração. "

Mas não acho que seja isso, por que esse erro só aparece depois que fecho o emulador, enquanto ta rodando ele ta normal, só não aparece na lista nada

Você está carregando a lista no metodo onCreate do ListaAlunos também? Depois que você insere o aluno e volta na lista, entrando e saindo do aplicativo, ele também não aparece?

Nunca vi algo parecido com este erro que você disse, não. Desculpe não conseguir ajudar =/

Sim, o onCreate acho que está normal sim:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intentVaiProFormulario);
            }
        });
    }

Você consegue baixar meu projeto e testar no seu emulador? Só para ver se o erro é aqui mesmo haha :)

solução!

No onCreate você tem que chamar o metodo "carregaLista();" também, caso contrário, não irá carregar... e seu github está vazio. Tá só no commit inicial.

Consegui aqui muito obrigado! Que erro bobo hahaha