Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Problema com o intent.putExtra("aluno", aluno)

Boa noite, estou com o seguinte problema, quando aperto no item que quero editalo no Activity da lista ele aparece esse erro abaixo, vi q quando eu retiro a linha com o intent.putExtra("aluno", aluno) o problema é resolvido porém percebi que n seria so isso e verifiquei novamente todos os passos e estavam como na explicação mas o erro persiste oq será??

Vlww abraço!

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: br.com.argos.agenda, PID: 21829
                                                                     java.lang.RuntimeException: Parcel: unable to marshal value 2 - Marcel
                                                                         at android.os.Parcel.writeValue(Parcel.java:1418)
                                                                         at android.os.Parcel.writeArrayMapInternal(Parcel.java:686)
                                                                         at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
                                                                         at android.os.Bundle.writeToParcel(Bundle.java:1079)
                                                                         at android.os.Parcel.writeBundle(Parcel.java:711)
                                                                         at android.content.Intent.writeToParcel(Intent.java:7804)
                                                                         at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2677)
                                                                         at android.app.Instrumentation.execStartActivity(Instrumentation.java:1574)
                                                                         at android.app.Activity.startActivityForResult(Activity.java:3921)
                                                                         at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
                                                                         at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
                                                                         at android.app.Activity.startActivityForResult(Activity.java:3881)
                                                                         at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871)
                                                                         at android.app.Activity.startActivity(Activity.java:4208)
                                                                         at android.app.Activity.startActivity(Activity.java:4176)
                                                                         at br.com.argos.agenda.ListaAlunosActivity$1.onItemClick(ListaAlunosActivity.java:38)
                                                                         at android.widget.AdapterView.performItemClick(AdapterView.java:310)
                                                                         at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
                                                                         at android.widget.AbsListView$PerformClick.run(AbsListView.java:3049)
                                                                         at android.widget.AbsListView$3.run(AbsListView.java:3886)
                                                                         at android.os.Handler.handleCallback(Handler.java:746)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                         at android.os.Looper.loop(Looper.java:148)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11 respostas

Como está sua classe Aluno? Está implementando java.io.Serializable como descrito nos exercícios?

Para incluir um objeto de Aluno no intent é necessário que Aluno implemente Serializable ou Parcelable.

Na classe Aluno, faça:

public class Aluno implements Serializable {

    //...
}

Sim minha classe Aluno já está implementando Seriazable. Percelable eu n tentei vou ver se da certo

Parcelable vem com métodos para serem implementados, para que serve essa classe ? Ela funciona da mesma forma que a Serializable??

Vlww

Posta sua classe ListaAlunosActivity pra eu dar uma olhada.

package br.com.argos.agenda;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.io.Serializable;
import java.util.List;

import br.com.argos.agenda.dao.AlunoDAO;
import br.com.argos.agenda.modelo.Aluno;

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 intentVaiproform = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                intentVaiproform.putExtra("aluno", aluno);
                startActivity(intentVaiproform);

            }
        });

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

            registerForContextMenu(listaAlunos);
    }

    private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();


        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);
    }

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

    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);
                AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                dao.deleta(aluno);
                dao.close();

                Toast.makeText(ListaAlunosActivity.this, "Deletar o aluno " + aluno.getNome(), Toast.LENGTH_SHORT).show();
                carregaLista();
                return false;
            }
        });
    }
}

Desculpa ai kkkk n sei botar na formatação correta :// ficou todo bagunçado o código

Oi Rafael, tudo bem?

Por acaso sua classe Aluno possui um atributo de algum tipo não serializável? Se for isso troque ou faça-o implementar Serializable.

Abraços!

Oi Rafael,

Conseguiu resolver seu problema?

Abraços!

Segue minha classe Aluno.

public class Aluno implements Serializable {

private Long id ; private String nome; private String endereco; private String telefone; private String site; private Double nota;

public Long getId() { return id; }

public void setId(Long id) { this.id = id; }

public String getNome() { return nome; }

public void setNome(String nome) { this.nome = nome; }

public String getEndereco() { return endereco; }

public void setEndereco(String endereco) { this.endereco = endereco; }

public String getTelefone() { return telefone; }

public void setTelefone(String telefone) { this.telefone = telefone; }

public String getSite() { return site; }

public void setSite(String site) { this.site = site; }

public Double getNota() { return nota; }

public void setNota(Double nota) { this.nota = nota; }

@Override public String toString() { return getId() +" - "+ getNome(); } }

solução!

Vlw galera pela força mas n sei como abri e fechei o projeto rodei novamente e funcionou Obrigado Abraço