AndroidRuntime 오류 : Parcel : 값을 마샬링 할 수 없습니다.


109

intent.puExtra 함수를 사용하여 HashMap을 새 활동에 전달하려고합니다. 디버거를 단계별로 실행하면 HashMap이 문제없이 추가되는 것 같지만 startActivty ()가 호출되면 Parcel : cannot marshal value 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
감사합니다. Liquor 및 Bottle 클래스 모두에 Serializable 구현을 추가해야했습니다.
Jared

2
작동합니다 .. Bottle 클래스에서 Serializable을 구현해야합니다. 감사 @naikus
Ashokchakravarthi Nagarajan

177
주류) : 비난 항상
세자르 Alexandru Vancea

3
나를 위해 일했습니다 :)
Jacky

1
작동하지만 Serialization이 이것과 어떤 관련이 있는지 혼란 스럽습니까? Android는 객체를 주기적으로 직렬화 및 역 직렬화하는 것을 계속합니까? 그리고 어떤 경우에 Serializable 인터페이스를 구현해야합니까?
Reeshabh Ranjan 2018
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.