Ошибка AndroidRuntime: посылка: невозможно маршалировать значение

109

Я пытаюсь передать HashMap новому действию с помощью функции intent.puExtra. Проходя через отладчик, кажется, что он добавляет HashMap без проблем, однако, когда вызывается startActivty (), я получаю сообщение об ошибке времени выполнения, в котором говорится, что Parcel: не может маршалировать значение com.appName.Liquor.

Liquor - это специальный класс, который я создал, и я считаю, что он в сочетании с HashMap вызывает проблему. Если я передаю строку, а не свой HashMap, он без проблем загружает следующее действие.

Основное занятие

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

Класс ликера

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

Дополнительная деятельность

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

Когда существует ошибка времени выполнения, она никогда не попадает в подкласс деятельности. Поэтому я почти уверен, что проблема существует в добавлении HashMap к намерению, и, основываясь на ошибке, я считаю, что причиной является мой класс Liquor, но я не могу понять, почему.

Мы будем очень благодарны за вашу помощь. Спасибо!

Джаред
источник

Ответы:

274

HashMapСам ваш сериализуемый, но Bottleсериализуемый ли класс? В противном случае он не будет сериализован и вызовет ошибки во время выполнения. Сделайте так, чтобы Bottleкласс реализовал java.io.Serializableинтерфейс

Найкус
источник
5
Спасибо, мне пришлось добавить инструменты Serializable в классы Liquor и Bottle.
Джаред
2
это работает .. Мне нужно реализовать Serializable в классе Bottle. Спасибо @naikus
Ashokchakravarthi Nagarajan
177
Ликер всегда виноват :))
Cezar Alexandru Vancea
3
Сработало для меня :)
Джеки
1
Это работает, но я не понимаю, какое отношение к этому имеет сериализация? Продолжает ли Android периодически сериализовать и десериализовать объекты? И в каких случаях мне нужно реализовать интерфейс Serializable (как здесь)?
Reeshabh Ranjan