AndroidRuntime error: Parcel: tidak dapat mengumpulkan nilai

109

Saya mencoba meneruskan HashMap ke aktivitas baru menggunakan fungsi intent.puExtra. Melangkah melalui debugger tampaknya menambahkan HashMap tidak ada masalah, namun ketika startActivty () dipanggil saya mendapatkan kesalahan runtime yang menyatakan bahwa Parcel: tidak dapat marshal nilai com.appName.Liquor.

Liquor adalah kelas khusus yang saya buat, dan saya percaya itu, dalam kombinasi dengan HashMap, menyebabkan masalah. Jika saya meneruskan string daripada HashMap saya, itu memuat aktivitas berikutnya tidak ada masalah.

Aktifitas utama

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

Kelas Minuman Keras

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 Kegiatan

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

Jika error runtime ada, error tersebut tidak pernah membuatnya menjadi kelas sub aktivitas. Jadi saya cukup yakin masalahnya ada dalam penambahan HashMap ke maksud, dan berdasarkan kesalahan saya yakin kelas Liquor saya adalah penyebabnya, tetapi saya tidak tahu mengapa.

Bantuan Anda akan sangat dihargai. Terima kasih!

Jared
sumber

Jawaban:

274

Anda HashMapsendiri dapat diserialkan tetapi apakah Bottlekelasnya dapat diserialkan? Jika tidak, itu tidak akan membuat serial dan akan melempar kesalahan saat runtime. Buat Bottlekelas mengimplementasikan java.io.Serializableantarmuka

naikus
sumber
5
Terima kasih, saya harus menambahkan implements Serializable ke kelas Liquor dan Bottle.
Jared
2
berhasil .. Saya harus mengimplementasikan Serializable di kelas Botol. Terima kasih @naikus
Ashokchakravarthi Nagarajan
177
Minuman keras selalu harus disalahkan :))
Cezar Alexandru Vancea
3
Bekerja untuk saya :)
Jacky
1
Berhasil, tapi saya bingung apa hubungannya Serialization dengan ini? Apakah Android terus melakukan serialisasi dan deserialisasi objek secara berkala? Dan dalam kasus apa saya perlu mengimplementasikan antarmuka Serializable (seperti di sini)?
Reeshabh Ranjan