Solucionado (ver solução)
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