2010-09-29 1 views
67

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

Ликер - это особый класс, который я создал, и я считаю, что в сочетании с 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); 

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

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 является причиной, но я не могу понять, почему.

Ваша помощь будет очень признательна. Благодаря!

ответ

169

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

+3

Спасибо, мне пришлось добавить инструменты, которые можно выполнить как для класса Liquor, так и для бутылок. – Jared

+1

это работает. Мне нужно реализовать Serializable в классе Bottle. Спасибо @naikus –

+103

Ликер всегда виноват :)) –

Смежные вопросы