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

Problemas ao usar o método alterar

Meu id está sempre vindo como null do FormularioHelper, por isso sempre entra no daoinserir ao invés do daoaltera.

FormulárioHelper

public class FormularioHelper {

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

    public FormularioHelper(FormularioActivity activity) {
        aluno = new Aluno();
        campoNome = (EditText) activity.findViewById(R.id.form_nome);
        campoEndereco = (EditText) activity.findViewById(R.id.form_endereco);
        campoTelefone = (EditText) activity.findViewById(R.id.form_telefone);
        campoSite = (EditText) activity.findViewById(R.id.form_site);
        campoNota = (RatingBar) activity.findViewById(R.id.form_nota);
    }

    public Aluno pegaAluno(){
        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 aluno;
    }

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

        Log.d("PREENCHER", "Aluno: " + aluno.toString());
    }
}

DAO

    @NonNull
    private ContentValues pegaDadosAluno(Aluno aluno) {
        ContentValues dados = new ContentValues();
        dados.put("nome",aluno.getNome());
        dados.put("endereco",aluno.getEndereco());
        dados.put("telefone",aluno.getTelefone());
        dados.put("site",aluno.getSite());
        dados.put("nota",aluno.getNota());
        return dados;
    }
    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = pegaDadosAluno(aluno);

        String[] params = {aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }

ListaAlunoActivity

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()){
            case R.id.menu_formulario_ok :
                Aluno aluno = helper.pegaAluno();
                AlunoDao dao = new AlunoDao(this);

                Log.d("FormAct", "ID: " + aluno.getId());

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

                dao.close();

               Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " salvo com sucesso!", Toast.LENGTH_SHORT).show();

                finish();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
3 respostas

Observei que no

Log.d("FormAct", "ID: " + aluno.getId());

Apresenta o resultado como null e por isso sempre entrao no dao.insere(aluno) , mas não achei o problema

Rodrigo,

Pelo que vi do seu código em nenhum momento está sendo feito um get no banco pra trazer o Id do Aluno e o método pegaAluno() não está setando o valor do Id. Então nesse caso o Id sempre será null. Tem alguma outra parte do seu código que está setando o valor para o atributo Id?

Abraço.

solução!

O método preencheFormulario que deveria estar salvando o id, mas depois que ocorre a edição e envio os dados pro DAO o id se perde, não sei pq. Fiz o seguinte, criei um atributo id na classe como estático e dentro do método copio o id assim que jogo os dados no formulário, sei que não é o certo, mas funcionou.

    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.id=aluno.getId(); //private static Long id;

        Log.d("PREENCHER", "Aluno: " + aluno.toString());
    }