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

Dúvida na Aula 5.4 - Editando alunos - Notas perdendo valor

Olá,

Já estou há um tempo tentando descobrir por que os alunos estão perdendo estrelas a cada vez que abro uma entrada para editar.

Se dou 5 estrelas, salvo e abro novamente, o aluno aparece com 3, por exemplo.

obs.: Vou postar o formulário helper, o Dao.buscaAluno e o click no FormularioActivity aqui, e o resto vou botar no bpaste.

Formulario helper:

public class FormularioHelper {


    private final EditText campoNome;
    private final EditText campoEndereco;
    private final EditText campoTelefone;
    private final EditText campoEmail;
    private final RatingBar campoNota;
    private  Aluno aluno;

    public FormularioHelper(Formulario activity) {
        campoNome = (EditText) activity.findViewById(R.id.formulario_nome);
        campoEndereco = (EditText) activity.findViewById(R.id.formulario_endereco);
        campoTelefone = (EditText) activity.findViewById(R.id.formulario_telefone);
        campoEmail = (EditText) activity.findViewById(R.id.formulario_email);
        campoNota = (RatingBar) activity.findViewById(R.id.formulario_nota);
        aluno = new Aluno();
    }

    public Aluno pegaAluno() {
        aluno.setNome(campoNome.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setTelefone(campoTelefone.getText().toString());
        aluno.setEmail(campoEmail.getText().toString());
        aluno.setNota(Double.valueOf(campoNota.getRating()));
        return aluno;
    }

    public void preencheFormulario(Aluno aluno) {
        campoNome.setText(aluno.getNome());
        campoEndereco.setText(aluno.getEndereco());
        campoEmail.setText(aluno.getEmail());
        campoTelefone.setText(aluno.getTelefone());
        campoNota.setProgress(aluno.getNota().intValue());
        this.aluno = aluno;

    }
}

busca alunos no AulunosDAO:

  public List<Aluno> buscaAlunos() {
        String sql = "SELECT * FROM Alunos;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor cur = db.rawQuery(sql, null);
        List<Aluno> alunos = new ArrayList<Aluno>();
        while(cur.moveToNext()){
            Aluno aluno = new Aluno();
            aluno.setId(cur.getLong(cur.getColumnIndex("id")));
            aluno.setNome(cur.getString(cur.getColumnIndex("nome")));
            aluno.setEndereco(cur.getString(cur.getColumnIndex("endereco")));
            aluno.setEmail(cur.getString(cur.getColumnIndex("email")));
            aluno.setTelefone(cur.getString(cur.getColumnIndex("telefone")));
            aluno.setNota(cur.getDouble(cur.getColumnIndex("nota")));
            alunos.add(aluno);
        }
        cur.close();
        db.close();
        return alunos;
    }

a chamada no FormularioActivities:

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:

                Aluno aluno = helper.pegaAluno();
                AlunoDAO dao = new AlunoDAO(this);

                if (aluno.getId() != 0){
                    dao.altera(aluno);
                } else{
                    dao.insere(aluno);
                }

                Toast.makeText(Formulario.this, "Aluno " + aluno.getNome() +" salvo.", Toast.LENGTH_SHORT).show();
                dao.close();
                finish();
                break;
        }


        return super.onOptionsItemSelected(item);
    }

Aluno.java: https://bpaste.net/show/cac80f48c197

AlunoDAO: https://bpaste.net/show/8ba56844b092

ListaAlunos: https://bpaste.net/show/a33dc605f5a9

FormularioActivity: https://bpaste.net/show/94d8adb59c12

layouts: https://bpaste.net/show/1123bfa1800b

Tentei debugar colocando breakpoint em todos os "nota" que achei.

o primeiro depois de alterar o contato: http://i.imgur.com/tF5YKly.png

o último ante do formulário abrir novamente: http://i.imgur.com/Urn84S3.png

o formulário: http://i.imgur.com/U5dHkVt.png

Está difćil encontrar o porque tudo parce normal até a lista abrir... Alguma ideia de como prosseguir?

3 respostas

finalmente encontrei o problema.No Helper:

        campoNota.setProgress(aluno.getNota().intValue());

deveria ser:

     campoNota.setRating(aluno.getNota().intValue());

pff...

Na o que eu corrigi "ajudou"... agora s eu der 5 estrelas, ele continua com 5. Mas se der 3 ou um uma estrela pela metade, o ele perde nota novamente depois de abrir novamente. Aquilo certamente estava errado, mas deve ter mais alguma coisa...

solução!
campoNota.setRating(aluno.getNota().floatValue());

claro, agora ssim :)