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

Repetindo registro alterado.

Então pessoal, segui o vídeo direitinho, já conferi todo o fonte da ultima alteração e não consigo ver onde estou passando batido.

Código altera no DAO

    public void altera(Aluno aluno)  {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = pegaDadosDoAluno(aluno);
        String[] params ={aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }

aqui o click o salvar.

    @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() != null)  {
                        dao.altera(aluno);
                    } else {
                        dao.insere(aluno);
                    }
                    dao.close();
                    Toast.makeText(FormularioActivity.this, "Aluno "+ aluno.getNome()+" salvo!", Toast.LENGTH_SHORT).show();
                    finish();
                    break;
            }
            return super.onOptionsItemSelected(item);
    }
4 respostas

Olá, tudo bem ?

Provavelmente o problema está no seu helper, no momento em que você está colocando o aluno no formulario, a referencia você não está atribuindo ao aluno que você possui no proprio formulario helper.


public class FormularioHelper { 

    private Aluno aluno;

    public FormularioHelper(FormularioActivity act) {

        // codigo anterior

        this.aluno = new Aluno();
    }

    public void colocaAluno(Aluno aluno) { 

        // codigo restante
        // talvez essa linha esteja faltando
        this.aluno =  aluno;

    }

    public Aluno retornaAluno() {

        //codigo setando atributos

        // caso você esteja instanciando um novo aluno, não precisa
        return this.aluno;
    }

}

Espero ter ajudado !

Abraços :D

Grande Matheus obrigado pelo retorno, só consegui parar pra verificar agora... veja ai meu código da classe FormularoHelper, a única diferença que vi foi o

this.aluno que não havia, mas no fim também continua repedindo ao alterar.

public class FormularioHelper {

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

    public FormularioHelper(FormularioActivity 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);
        campoSite = (EditText) activity.findViewById(R.id.formulario_site);
        campoNota = (RatingBar) activity.findViewById(R.id.formulario_nota);
        this.aluno = new Aluno();
    }

    public Aluno pegaAluno() {
        Aluno aluno = new Aluno();
        aluno.setNome(campoNome.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setTelefone(campoTelefone.getText().toString());
        aluno.setSite(campoSite.getText().toString());
        aluno.setNota(Double.valueOf(campoNota.getProgress()));
        return this.aluno;
    }

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

}
solução!

Você provavelmente não está atribuindo o id do Aluno ao recuperá-lo do banco. Posta a classe AlunoDAO.

Hum.... estranho que ele atribui os dados do cliente para alteração.

Mas de qualquer forma agradeço a ajuda. Vou repetir a aula e verificar em que momento faltou atenção...

abraço.