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

Não está salvando lista após implementar código edita aluno.

Após a implementação do código para editar aluno o app parou de salvar alunos na lista.

public class FormularioAlunoActivity extends AppCompatActivity {

    private EditText campoNome;
    private EditText campoTelefone;
    private EditText campoEmail;
    private final AlunoDAO dao = new AlunoDAO();
    private Aluno aluno;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario_aluno);
        setTitle("Novo aluno");
        inicializacaoDosCampos();
        configuraBotaoSalvar();

        Intent dados = getIntent();
        aluno = (Aluno) dados.getSerializableExtra("aluno");
     if ( aluno != null) {
            campoNome.setText(aluno.getNome());
            campoTelefone.setText(aluno.getTelefone());
            campoEmail.setText(aluno.getEmail());
        } 
    }

    private void configuraBotaoSalvar() {
        Button botaoSalvar = findViewById(R.id.activity_formulario_aluno_botao_salvar);
        botaoSalvar.setOnClickListener(new View.OnClickListener() {

           @Override
            public void onClick(View view) {
//                Aluno alunoCriado = criaAluno();
//                salva(alunoCriado);
                preencheAluno();
                dao.edita(aluno);
                finish();
            }
        });
    }

    private void inicializacaoDosCampos() {
        campoNome = findViewById(R.id.activity_formulario_aluno_nome);
        campoTelefone = findViewById(R.id.activity_formulario_aluno_telefone);
        campoEmail = findViewById(R.id.activity_formulario_aluno_email);
    }

    private void salva(Aluno aluno) {
        dao.salva(aluno);
        finish();
    }

    private void preencheAluno() {
        String nome = campoNome.getText().toString();
        String telefone = campoTelefone.getText().toString();
        String email = campoEmail.getText().toString();

        aluno.setNome(nome);
        aluno.setTelefone(telefone);
        aluno.setEmail(email);
        //return new Aluno(nome, telefone, email);

    }
}

public class AlunoDAO {
    private final static List<Aluno> alunos = new ArrayList<>();
    private static int contadorDeIds = 1;

    public void salva(Aluno aluno) {
        aluno.setId(contadorDeIds);
        alunos.add(aluno);
        contadorDeIds++;
    }

    public void edita(Aluno aluno){
        Aluno alunoEncontrado = null;
        for (Aluno a : alunos) {
            if (a.getId() == aluno.getId()) {
                alunoEncontrado = a;
            }
        }
            if (alunoEncontrado != null) {
                int posicaoDoAluno = alunos.indexOf(alunoEncontrado);
                alunos.set(posicaoDoAluno, aluno);
            }
    }

    public List<Aluno> todos() {
        return new ArrayList<>(alunos);
    }
}

public class Aluno implements Serializable {
    private int id = 0;
    private String nome;
    private String telefone;
    private String email;

    public Aluno(String nome, String telefone, String email) {
        this.nome = nome;
        this.telefone = telefone;
        this.email = email;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNome() {
        return nome;
    }

    public String getTelefone() {
        return telefone;
    }

    public String getEmail() {
        return email;
    }

    @NonNull
    @Override
    public String toString() {
        return nome;
        }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}
2 respostas
solução!

Leandro, tudo bem ?

Cara você comentou uma parte muito importante do código, por isso tá dando problema rapaz.

private void configuraBotaoSalvar() {
        Button botaoSalvar = findViewById(R.id.activity_formulario_aluno_botao_salvar);
        botaoSalvar.setOnClickListener(new View.OnClickListener() {

           @Override
            public void onClick(View view) {
//                Aluno alunoCriado = criaAluno();
//                salva(alunoCriado);
                preencheAluno();
                dao.edita(aluno);
                finish();
            }
        });
    }

O correto seria fazer algo do genero:

private void configuraBotaoSalvar() {
        Button botaoSalvar = findViewById(R.id.activity_formulario_aluno_botao_salvar);
        botaoSalvar.setOnClickListener(new View.OnClickListener() {

           @Override
            public void onClick(View view) {
                preencheAluno();
        if( aluno.getId() == null) {
                salva(alunoCriado);
        } else {
                dao.edita(aluno);
        }
                finish();
            }
        });
    }

Entretanto você precisa inicializar o aluno no atributo da classe:

    private Aluno aluno = new Aluno();

Na aula seguinte o instrutor vai orientar em como corrigir esse erro.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software