ข้อผิดพลาด AndroidRuntime: พัสดุ: ไม่สามารถจัดเก็บค่าได้


109

ฉันกำลังพยายามส่งต่อ HashMap ไปยังกิจกรรมใหม่โดยใช้ฟังก์ชัน Intent.puExtra เมื่อก้าวผ่านดีบักเกอร์ดูเหมือนว่าจะเพิ่ม HashMap ก็ไม่มีปัญหาอย่างไรก็ตามเมื่อ startActivty () ถูกเรียกว่าฉันได้รับข้อผิดพลาดรันไทม์ที่ระบุว่า Parcel: ไม่สามารถ marshal ค่า com.appName.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
Jared

2
ได้ผล .. ฉันต้องใช้ Serializable ในคลาส Bottle ขอบคุณ @naikus
Ashokchakravarthi Nagarajan

177
เหล้าเป็นโทษเสมอ :))
Cezar Alexandru Vancea

3
ทำงานให้ฉัน :)
Jacky

1
มันใช้งานได้ แต่ฉันสับสนว่า Serialization เกี่ยวข้องอะไรกับสิ่งนี้? Android ยังคงทำการทำให้เป็นอนุกรมและแยกวัตถุเป็นระยะ ๆ หรือไม่? และในกรณีใดบ้างที่ฉันต้องใช้อินเทอร์เฟซแบบอนุกรม (เช่นที่นี่)
Reeshabh Ranjan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.