Errore di AndroidRuntime: Parcel: impossibile eseguire il marshalling del valore


109

Sto cercando di passare una HashMap a una nuova attività utilizzando la funzione intent.puExtra. Passando attraverso il debugger sembra che aggiunga HashMap senza problemi, tuttavia quando viene chiamato startActivty () ottengo un errore di runtime che indica che Parcel: impossibile eseguire il marshalling del valore com.appName.Liquor.

Liquor è una classe personalizzata che ho creato e credo che, in combinazione con una HashMap, stia causando il problema. Se passo una stringa invece della mia HashMap carica l'attività successiva senza problemi.

Attività principale

lv.setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> parent, View view,
      int position, long id) {

      String cat = ((TextView) view).getText().toString();
      Intent i = new Intent(OhioLiquor.this, Category.class);
      i.putExtra("com.appName.cat", _liquorBase.GetMap());
      startActivity(i);

Classe di liquori

public class Liquor
{
public String name;
public int code;
public String category;

private HashMap<String, Bottle> _bottles;

public Liquor()
{
    _bottles = new HashMap<String, Bottle>();
}

public void AddBottle(Bottle aBottle)
{
    _bottles.put(aBottle.size, aBottle);
}
}

Attività secondaria

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    HashMap<Integer, Liquor> map = (HashMap<Integer, Liquor>)getIntent().getSerializableExtra("com.appName.cat");

    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, GetNames(map)));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

Quando l'errore di runtime esiste, non lo fa mai nella classe di attività secondaria. Quindi sono abbastanza sicuro che il problema esista nell'aggiunta di HashMap all'intento, e in base all'errore credo che la mia classe Liquor sia la causa, ma non riesco a capire perché.

Il tuo aiuto sarà molto apprezzato. Grazie!

Risposte:


274

Il tuo HashMapstesso è serializzabile ma la Bottleclasse è serializzabile? In caso contrario, non verrà serializzato e genererà errori in fase di esecuzione. Fai in modo che la Bottleclasse implementi l' java.io.Serializableinterfaccia


5
Grazie, ho dovuto aggiungere gli strumenti Serializable a entrambe le classi Liquor e Bottle.
Jared

2
funziona .. devo implementare Serializable nella classe Bottle. Grazie @naikus
Ashokchakravarthi Nagarajan

177
La colpa è sempre del liquore :))
Cezar Alexandru Vancea

3
Ha funzionato per me :)
Jacky

1
Funziona, ma sono confuso cosa c'entra la serializzazione con questo? Android continua a serializzare e deserializzare periodicamente gli oggetti? E in quali casi devo implementare l'interfaccia Serializable (come qui)?
Reeshabh Ranjan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.