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

Dúvida no Ex. 8 da Aula 5 - Editando alunos

Olá, aqui funcionou legal, mas por algum motivo começou a dar crash no programa..

Retirei as alterações desse exercício e não parecem ter a ver..

O que notei é que ao clicar no botão de "envio" do formulário.. ao realizar o "finish()" dá crash.

Antes não acontecia isso, mas mesmo comentando as alterações continuou acontecendo.. Alguma idéia do por quê?

Valeu.

5 respostas

Daniel, tudo bem ?

Consegue postar seu código e a Exception que está dando para podermos te ajudar ?

Abraço

Opa,

Onde eu vejo a Exception? Aqui só aparece no emulador "Unfortunately, Agenda has stoppped." E aperta Ok e volta pra tela inicial da Agenda..

Comentei o finish() aqui.. Não é ele o problema.

Colocando o código utilizado aqui (view principal + botão clicado + ok e voltar à view principal).

public class ListaAlunosActivity extends AppCompatActivity {

    private ListView listaAlunos;

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

        listaAlunos = (ListView) findViewById(R.id.lista_alunos);

        listaAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> lista, View item, int position, long id) {
                Aluno aluno = (Aluno) lista.getItemAtPosition(position);
                Intent intent = new Intent(ListaAlunosActivity.this, FormularioActivity.class);

                intent.putExtra("aluno", aluno);
                startActivity(intent);
            }
        });

        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intent);
            }
        });

        registerForContextMenu(listaAlunos);
    }
public class FormularioActivity extends AppCompatActivity {

    private FormularioHelper helper;

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

        this.helper = new FormularioHelper(this);

        Intent intent = getIntent();
        Aluno aluno = (Aluno) intent.getSerializableExtra("aluno");
        if(aluno != null) {
            this.helper.preencheFormulario(aluno);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaAluno();
                AlunoDAO dao = new AlunoDAO(this);

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

                finish();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
solução!

Achei o erro!! haha

No FormularioHelper.. Eu invés de Utilizar this.aluno = new Aluno(); Estava definindo um Aluno local.. Então era null quando tentava usar e dava crash.. Aproveitando.. Por que é feito isso aqui?

    public void preencheFormulario(Aluno aluno) {
        this.aluno = aluno;

        nome.setText(aluno.getNome());
        telefone.setText(aluno.getTelefone());
        endereco.setText(aluno.getEndereco());
        site.setText(aluno.getSite());
        nota.setProgress(aluno.getNota().intValue());
    }

Por que esse this.aluno = aluno nessa parte?

Valeu!

Oi Daniel,

Legal que identificou o erro !

Nesse outro pedaço de código que você enviou, fazemos isso para que o aluno que recebermos na edição seja o mesmo que temos no FormularioHelper, estamos passando a referência dele para o formulário, assim quando formos fazer a edição ele terá id que era o campo necessário para rolar.

Espero ter ajudado !

Opa, entendi agora! Valeu.