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

o campoNome.setText(aluno.getNome()); retorna valor nulo e quebra minha aplicação quando eu aperto no botão de adicionar aluno

meu código da lista de aluno é

package mineconstruc.com.minha_agenda_ui.activity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.List;

import mineconstruc.com.minha_agenda_dao.AlunoDAO;
import mineconstruc.com.minha_agenda_model.Aluno;
import mineconstruc.com.minha_agenda_teste3.R;

public class Listadealuno extends AppCompatActivity {

    public static final String TITULO_DA_APPBAR = "Lista de Alunos";
    private final AlunoDAO dao = new AlunoDAO();

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



        setTitle(TITULO_DA_APPBAR);
        configuraFABNovoALuno();


    }

    private void configuraFABNovoALuno() {
        FloatingActionButton botaoNovoAluno = findViewById(R.id.activity_lista_de_akunos_fab_novo_aluno);
        botaoNovoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                abreFormularioListadeAluno();
            }
        });
    }

    private void abreFormularioListadeAluno() {
        startActivity(new Intent(this, FormularioNovoAlunoActivity.class));
    }

    @Override
    protected void onResume() {
        super.onResume();
        configuraLista();
    }

    private void configuraLista() {
        ListView listaDeAlunos = findViewById(R.id.activity_lista_alunos_listview);
        final List<Aluno> alunos = dao.todos();
        listaDeAlunos.setAdapter(new ArrayAdapter<>(this,
                android.R.layout.simple_list_item_1, alunos));
        listaDeAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int posicao, long id) {
                Aluno alunoEscolhido = alunos.get(posicao);
                Intent vaiParaFormularioActivity;
                vaiParaFormularioActivity = new Intent(Listadealuno.this, FormularioNovoAlunoActivity.class);
                vaiParaFormularioActivity.putExtra("aluno", alunoEscolhido);
                startActivity(vaiParaFormularioActivity);


            }
        });

        }



            }











6 respostas

do meu formulario de alunos

package mineconstruc.com.minha_agenda_ui.activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import java.io.Serializable;

import mineconstruc.com.minha_agenda_dao.AlunoDAO;
import mineconstruc.com.minha_agenda_model.Aluno;
import mineconstruc.com.minha_agenda_teste3.R;

public class FormularioNovoAlunoActivity extends AppCompatActivity  {

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



    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setTitle(TITULO_DA_APPBAR);
        setContentView(R.layout.activityformularionovoaluno);

        InicializacaodosCampos();


        ConfiguraBotaoSalvar();

        Intent dados = getIntent();
        Aluno aluno = (Aluno) dados.getSerializableExtra("aluno");
        campoNome.setText(aluno.getNome());


    }

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



            }
        });
    }

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


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

    @NonNull
    private Aluno criaAluno() {
        String nome = campoNome.getText().toString();
        String telefone = campoTelefone.getText().toString();
        String email = campoEmail.getText().toString();

        Aluno alunoCriado = new Aluno( nome, telefone, email);
        return alunoCriado;
    }
}

o código do formulario de alunos é

package mineconstruc.com.minha_agenda_ui.activity;

import static mineconstruc.com.minha_agenda_model.Aluno.*;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import java.io.Serializable;

import mineconstruc.com.minha_agenda_dao.AlunoDAO;
import mineconstruc.com.minha_agenda_model.Aluno;
import mineconstruc.com.minha_agenda_teste3.R;

public class FormularioNovoAlunoActivity extends AppCompatActivity  {

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



    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setTitle(TITULO_DA_APPBAR);
        setContentView(R.layout.activityformularionovoaluno);

        InicializacaodosCampos();


        ConfiguraBotaoSalvar();

        Intent dados = getIntent();
        Aluno aluno = (Aluno) dados.getSerializableExtra("aluno");
//        campoNome.setText(aluno.getNome());
//        campoEmail.setText(aluno.getEmail());
//        campoTelefone.setText(aluno.getTelefone());

    }

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



            }
        });
    }

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


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

    @NonNull
    private Aluno criaAluno() {
        String nome = campoNome.getText().toString();
        String telefone = campoTelefone.getText().toString();
        String email = campoEmail.getText().toString();

        Aluno alunoCriado = new Aluno( nome, telefone, email);
        return alunoCriado;
    }
}

deixei comentado pq quando deixo ativo eles quebram minha aplicação quando aperto o botão de adicionar

fala Daniel de boa?

cara acho que essa dúvida tá relacionada com aquelas outras não?

se tiver consegue fechar o tópico por favor

não. isso é outra dúvida

solução!

Cara, acho que te falei isso num outro post, mas sem problemas.

O lance é que o aluno pode estar nulo e quando voce quer criar um novo aluno você entra no formulário, que segundo seu código espera um aluno e é ai que quebra. Pra resolver isso, basta fazer uma validação garantindo que existe aluno antes de popular os campos:

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setTitle(TITULO_DA_APPBAR);
        setContentView(R.layout.activityformularionovoaluno);

        InicializacaodosCampos();


        ConfiguraBotaoSalvar();

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

    }

entendi. obrigado