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!