Помилка 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);
}
}

Sub Активність

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 у класі пляшок. Дякуємо @naikus
Ashokchakravarthi Nagarajan

177

3
Працював для мене :)
Джекі

1
Це працює, але я розгублений, що стосується серіалізації? Чи Android продовжує періодично серіалізувати та десеріалізувати об'єкти? І в яких випадках мені потрібно реалізувати інтерфейс Serializable (як тут)?
Reeshabh Ranjan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.