AndroidRuntime error: Parcel: không thể điều chỉnh giá trị


109

Tôi đang cố gắng chuyển một HashMap đến một hoạt động mới bằng cách sử dụng hàm ý định.puExtra. Bước qua trình gỡ lỗi, có vẻ như nó thêm HashMap không có vấn đề gì, tuy nhiên khi startActivty () được gọi, tôi nhận được lỗi thời gian chạy cho biết rằng Parcel: không thể điều chỉnh giá trị com.appName.Liquor.

Liquor là một lớp tùy chỉnh mà tôi đã tạo và tôi tin rằng nó, kết hợp với HashMap, đang gây ra sự cố. Nếu tôi chuyển một chuỗi chứ không phải HashMap của tôi, nó sẽ tải hoạt động tiếp theo không có vấn đề gì.

Hoạt động chủ yêu

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

Loại rượu

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

Hoạt động phụ

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

Khi lỗi thời gian chạy tồn tại, nó sẽ không bao giờ đưa nó vào lớp hoạt động phụ. Vì vậy, tôi khá chắc chắn rằng vấn đề tồn tại khi thêm HashMap vào mục đích và dựa trên lỗi, tôi tin rằng lớp Liquor của tôi là nguyên nhân, nhưng tôi không thể tìm ra lý do.

giúp đỡ của bạn sẽ được nhiều đánh giá cao. Cảm ơn!

Câu trả lời:


274

HashMapBản thân của bạn là serializable nhưng Bottleclass có thể serializable? Nếu không, nó sẽ không tuần tự hóa và sẽ tạo ra lỗi trong thời gian chạy. Làm cho Bottlelớp triển khai java.io.Serializablegiao diện


5
Cảm ơn, tôi đã phải thêm các thiết bị Có thể nối tiếp hóa vào cả hai lớp Rượu và Chai.
Jared

2
nó hoạt động .. Tôi phải triển khai Serializable trong lớp Chai. Cảm ơn @naikus
Ashokchakravarthi Nagarajan

177
Rượu luôn là để đổ lỗi :))
Cezar Alexandru Vancea

3
Làm việc cho tôi :)
Jacky

1
Nó hoạt động, nhưng tôi không hiểu Serialization phải làm gì với điều này? Android có tiếp tục tuần tự hóa và giải mã hóa các đối tượng theo định kỳ không? Và trong những trường hợp nào tôi cần triển khai giao diện Serializable (như ở đây)?
Reeshabh Ranjan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.