Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Estou recebendo uma exception ao rodar meu codigo e não sei o que estou fazendo errado.

Boa noite. Primeiramente segue a exception que recebo no Logcat:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

FATAL EXCEPTION: main
                                                                                                    Process: com.example.agenda, PID: 20019
                                                                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.agenda/com.example.agenda.ui.activity.FormularioAlunoActivity}: java.lang.NullPointerException: Attempt to invoke virtual method '**java.lang.String com.example.agenda.model.Aluno.getTelefone()**' on a null object reference

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Recebo um erro parecido para o email() e nome().

meu codigo do formulario esta assim:

public class FormularioAlunoActivity extends AppCompatActivity {

    public static final String TITULO_APPBAR = "Novo Aluno";
    public static final AlunoDAO dao = new AlunoDAO();
    private EditText campoNome;
    private EditText campoTelefone;
    private EditText campoEmail;
    private Aluno aluno;

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

        setTitle(TITULO_APPBAR);
        inicializacaoCampos();
        configuraBotaoSalvar(dao);
        Intent dados = getIntent();
        aluno = (Aluno) dados.getSerializableExtra("Aluno");
        campoNome.setText(aluno.getNome());
        campoTelefone.setText(aluno.getTelefone());
        campoTelefone.setText(aluno.getEmail());
    }

    private void configuraBotaoSalvar(AlunoDAO dao) {
        Button botaoSalvar = findViewById(R.id.activity_formulario_aluno_botao_salvar);
        botaoSalvar.setOnClickListener(v -> {
            //Aluno alunoCriado = preencheAluno();
            //salva(dao, alunoCriado);
            preencheAluno();
            dao.edita(aluno);
            finish();
        });
    }

    private void inicializacaoCampos() {
        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);
        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);
    }
}

e meu codigo do aluno esta com todos os getters, setters, construtor e toString.

Acho importante mencionar que o app inicia, porem ''crasha'' assim que clico no botao de adicionar um Aluno.

Agradeço a paciencia.

1 resposta
solução!

Fala Murilo, de boa?

Cara esse problema é pq voce não está fazendo nenhuma validação se tem aluno ou não.

  private Aluno aluno;

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

        setTitle(TITULO_APPBAR);
        inicializacaoCampos();
        configuraBotaoSalvar(dao);
        Intent dados = getIntent();
        aluno = (Aluno) dados.getSerializableExtra("Aluno");
        campoNome.setText(aluno.getNome());
        campoTelefone.setText(aluno.getTelefone());
        campoTelefone.setText(aluno.getEmail());
    }

O atributo aluno inicia com valor default null, nisso você tenta atribuir valor:

 aluno = (Aluno) dados.getSerializableExtra("Aluno");

Só que num cenário onde vc quer fazer o registro, não está passando nenhum aluno para o formulário e já na linha de baixo o app estoura o erro, por você estar mexendo com uma referencia nula..

O que você precisa fazer é uma validação:

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

Isso deve solucionar seu problema