AndroidRuntimeエラー:パーセル:値をマーシャリングできません


109

intent.puExtra関数を使用して、HashMapを新しいアクティビティに渡そうとしています。デバッガーをステップ実行すると、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
おかげで、LiquiorクラスとBottleクラスの両方にSerializableの実装を追加する必要がありました。
Jared

2
それは動作します。BottleクラスにSerializableを実装する必要があります。ありがとう@naikus
Ashokchakravarthi Nagarajan

177
酒は常に非難される:))
セザール・アレクサンドル・

3
私のために働いた:)
ジャッキー

1
それは機能しますが、シリアル化がこれと何をするのか混乱していますか?Androidは定期的にオブジェクトのシリアライズとデシリアライズを続けますか?そして、どのような場合に(ここのように)Serializableインターフェースを実装する必要がありますか?
Reeshabh Ranjan 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.