3
respostas

Construtor de Aluno perde referência quando crio outro

Quando crio o construtor de Aluno para receber dados da criação de um novo registro (Aula 4 - 4:47), perco a referência do construtor que recebe nome, telefone e email. No segundo bloco de código há um comentário "//Esse construtor perde a referência"

package alura.com.br.ui.activity;

import static alura.com.br.ui.activity.ConstantesActivities.CHAVE_ALUNO;
import static alura.com.br.ui.activity.ConstantesActivities.TITULO_APPBAR_EDITA_ALUNO;
import static alura.com.br.ui.activity.ConstantesActivities.TITULO_APPBAR_NOVO_ALUNO;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.Serializable;

import alura.com.br.R;
import alura.com.br.dao.AlunoDAO;
import alura.com.br.ui.activity.model.Aluno;

public class FormularioAlunoActivity extends AppCompatActivity {

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

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

        carregaAluno();
    }

    private void carregaAluno() {
        Intent dados = getIntent();
        if (dados.hasExtra("aluno")) {
            aluno = (Aluno) dados.getSerializableExtra(CHAVE_ALUNO);
            preencheCampos();
        } else{
            aluno = new Aluno();
        }
    }

    private void preencheCampos() {
        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) {
                setTitle(TITULO_APPBAR_EDITA_ALUNO);
                finalizaFormulario();
            }
        });
    }

    private void finalizaFormulario() {
        preencheAluno();
        if(aluno.temIdValido()){
            dao.edita(aluno);
        } else {
            setTitle(TITULO_APPBAR_NOVO_ALUNO);
            dao.salva(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 alunoCriado) {
        dao.salva(alunoCriado);
        startActivity(new Intent(FormularioAlunoActivity.this,
                ListaAlunosActivity.class));
        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);
    }
}
package alura.com.br.ui.activity.model;

import androidx.annotation.NonNull;

import java.io.Serializable;

public class Aluno implements Serializable {

    private int id = 0;
    private String nome;
    private String telefone;
    private String email;

    //Esse construtor perde a referência
    public Aluno(String nome, String telefone, String email) {
        this.nome = nome;
        this.telefone = telefone;
        this.email = email;
    }

    public Aluno() {

    }

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

    public boolean temIdValido() {
        return id > 0;
    }
}
3 respostas

Isso está gerando os crashs de NullPointerException.

Ainda não encontrei a forma de manter a referência de ambos os construtores

Alguém que tenha corrigido o NullPointerException consegue ajudar com o debbug?

Fala Thiago! De boa ?

Cara não saquei o perder a referencia que tu ta falando ai!

Olhando aqui, parece que tudo está certinho...

Esse bloco de código tá meio estranho:

    private void salva(Aluno alunoCriado) {
        dao.salva(alunoCriado);
        startActivity(new Intent(FormularioAlunoActivity.this,
                ListaAlunosActivity.class)); // acho que não quer subir uma nova activity. acho que deve remover isso
        finish();
    }

Consegue mostrar pra gente o log desse null pointer ai ?