Android

AndroidRuntime error: Parcel: unable to marshal value

Ошибка AndroidRuntime: Посылка: не удается маршалировать значение

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

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

Основное действие

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

Класс Liquor

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

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

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

Переведено автоматически
Ответ 1

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

Ответ 2

Я получал эту ошибку, потому что мой класс не был Serializable. Чтобы сделать мой класс сериализуемым, мне пришлось добавить : Serializable в конце класса, чтобы сделать сериализуемым. Точно так же, как это

class Shirt(val price: Double, val discountedPrice: Double) : Serializable

Обязательно импортируйте Serializable следующим образом

import java.io.Serializable
java android