Błąd AndroidRuntime: paczka: nie można zorganizować wartości

109

Próbuję przekazać HashMap do nowego działania za pomocą funkcji intent.puExtra. Po przejściu przez debugger wydaje się, że dodaje on HashMap bez problemu, jednak po wywołaniu metody startActivty () pojawia się błąd w czasie wykonywania, informujący, że Parcel: nie można zorganizować wartości com.appName.Liquor.

Alkohol to niestandardowa klasa, którą stworzyłem i uważam, że to w połączeniu z HashMap powoduje problem. Jeśli przekażę ciąg znaków, a nie moją HashMap, załaduje następną czynność, bez problemu.

Główna aktywność

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);

Klasa likierów

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);
}
}

Działanie podrzędne

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);

Gdy błąd czasu wykonania istnieje, nigdy nie trafia do podklasy działania. Jestem więc prawie pewien, że problem istnieje w dodawaniu HashMap do intencji i na podstawie błędu uważam, że przyczyną jest moja klasa Liquor, ale nie mogę dowiedzieć się, dlaczego.

Twoja pomoc będzie bardzo doceniona. Dzięki!

Jared
źródło

Odpowiedzi:

274

Twoja HashMapsama jest możliwa do serializacji, ale czy można Bottleserializować klasę? Jeśli nie, nie będzie serializować i będzie zgłaszać błędy w czasie wykonywania. Spraw, aby Bottleklasa implementowała java.io.Serializableinterfejs

naikus
źródło
5
Dzięki, musiałem dodać narzędzia Serializable do obu klas Liquor i Bottle.
Jared
2
to działa .. Muszę zaimplementować Serializable w klasie Bottle. Dzięki @naikus
Ashokchakravarthi Nagarajan
177
Alkohol jest zawsze winny :))
Cezar Alexandru Vancea
3
Pracował dla mnie :)
Jacky
1
Działa, ale jestem zdezorientowany, co ma z tym wspólnego serializacja? Czy system Android okresowo serializuje i deserializuje obiekty? W jakich przypadkach muszę zaimplementować interfejs Serializable (jak tutaj)?
Reeshabh Ranjan