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

getSerializableExtra dando NullPointerException

Olá pessoal, tudo bem?

Quando tento rodar o código abaixo, quando tento clicar no contato na MainActivity, ele da erro e quebra o app.

Olhando o logcat, aparece que o erro seria NullPointer no getSeriazable. Quando tento dar um get no nome do contato ele gera um NullPointerException.

Não entendi o motivo, já que criei o objeto Aluno segue o código:

Main:

package br.com.XX.ui.activity;


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

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

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

import java.util.List;

import br.com.XX.DAO.AlunoDAO;
import br.com.XX.R;
import br.com.XX.modelo.Aluno;

import static android.widget.Toast.LENGTH_SHORT;
import static android.widget.Toast.makeText;


public class MainActivity extends AppCompatActivity {

    private final AlunoDAO dao = new AlunoDAO();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("Minha Agenda");
        dao.salva(new Aluno("Alex", "1122223333", "alex@alura.com.br"));
        dao.salva(new Aluno("Fran", "1122223333", "fran@gmail.com"));



        FloatingActionButton botaoAdicionar = findViewById(R.id.adicionarAluno);
        botaoAdicionar.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {

               startActivity(new Intent(MainActivity.this, CadastrodecontatoActivity.class));

            }

        });




    }

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


        ListView ListaDeAlunos = findViewById(R.id.listaDeAlunos);

        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 l) {
                makeText(MainActivity.this, "" + posicao, LENGTH_SHORT).show();
                final Aluno alunoEscolhido = alunos.get(posicao);
                final Intent vaiParaCadastro = new Intent(MainActivity.this, CadastrodecontatoActivity.class);
                vaiParaCadastro.putExtra("Aluno", alunoEscolhido);
                startActivity(vaiParaCadastro);
            }
        });



    }}

CadastroDeContato

package br.com.XX.ui.activity;

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

import androidx.appcompat.app.AppCompatActivity;

import br.com.XX.DAO.AlunoDAO;
import br.com.XX.R;
import br.com.XX.modelo.Aluno;

public class CadastrodecontatoActivity extends AppCompatActivity {




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cadastro_de_contato);
        setTitle("Cadastro de Contato");



        final AlunoDAO dao = new AlunoDAO();
        final EditText nome = findViewById(R.id.nome);
        final EditText email = findViewById(R.id.email);
        final EditText telefone = findViewById(R.id.telefone);
        Button botaoSalvar = findViewById(R.id.botao_de_cadastro);

        Intent dados = getIntent();
        Aluno aluno = (Aluno) dados.getSerializableExtra("aluno");
        nome.setText(aluno.getNomeDoContato());
        email.setText(aluno.getEmailDoContato());
        telefone.setText(aluno.getTelefoneDoContato());


        // COLOCAR O LISTENER PARA CAPTURAR AS AÇÕES DO BOTAO
        botaoSalvar.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {


                String nomeDoContato = nome.getText().toString();
                String emailDoContato = email.getText().toString();
                String telefoneDoContato = telefone.getText().toString();

                Aluno alunoCriado = new Aluno(nomeDoContato, emailDoContato, telefoneDoContato);
                dao.salva(alunoCriado);

                finish();


            }

        });
    }
}

Podem me ajudar?

1 resposta
solução!

Bom dia, ja resolveu seu problema? Acredito que seja nesta parte .... a String é Case-sensitive você manda um "aluno" e recebe um "Aluno"; vaiParaCadastro.putExtra("Aluno", alunoEscolhido); Aluno aluno = (Aluno) dados.getSerializableExtra("aluno");

Espero ter ajudado.

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