我有一个包含菜单项对象的ArrayList的订单对象。这两个类实现Parcelable接口。
I have an Order Object that contains an ArrayList of MenuItem Objects. Both classes implement the Parcelable interface.
当我试图找回从意向对象在新的活动我得到以下错误:
When I attempt to retrieve the object from the Intent in the new activity I get the following error:
了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.waitron5 / com.example.waitron5.SectionsActivity}:解组时ClassNotFoundException的:android.os.BadParcelableException com.example.waitron5.MenuItem
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.waitron5/com.example.waitron5.SectionsActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.example.waitron5.MenuItem
下面是code,我订单发送对象:
Here is the code where I send the Order object:
i = new Intent(v.getContext(), SectionsActivity.class); i.putExtra("data", order); startActivity(i);下面是我检索Order对象母鹿:
Here is the doe where I retrieve the Order object:
Intent i = getIntent(); if(i != null && i.hasExtra("data")) { order = i.getParcelableExtra("data"); Toast.makeText( this.getApplicationContext(), "recieved order object, covers: " + order.getCovers() + " table no: " + order.getTable() + " order size: " + order.getItems().size(), Toast.LENGTH_SHORT).show();Order类:
Order class:
package com.example.waitron5; import java.util.ArrayList; import android.os.Parcel; import android.os.Parcelable; public class Order implements Parcelable { private int covers; private int table; private ArrayList<MenuItem> items; public Order(){ super(); this.items = new ArrayList<MenuItem>(); } public static final Parcelable.Creator<Order> CREATOR = new Parcelable.Creator<Order>() { @Override public Order createFromParcel(Parcel source) { return new Order(source); } @Override public Order[] newArray(int size) { return new Order[size]; } }; public Order(int covers, int table) { super(); this.covers = covers; this.table = table; this.items = new ArrayList<MenuItem>(); } public int getCovers() { return covers; } public void setCovers(int covers) { this.covers = covers; } public int getTable() { return table; } public void setTable(int table) { this.table = table; } public ArrayList<MenuItem> getItems() { return items; } public void setItems(ArrayList<MenuItem> items) { this.items = items; } //add to order public void addToOrder(MenuItem m){ items.add(m); } //remove from order public void removeFromOrder(MenuItem m){ items.remove(m); } public Order(Parcel source) { this(); readFromParcel(source); } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeInt(covers); dest.writeInt(table); dest.writeList(items); } @SuppressWarnings("unchecked") private void readFromParcel(Parcel source) { // TODO Auto-generated method stub covers = source.readInt(); table = source.readInt(); source.readList(items, null); } }MenuItem类:
MenuItem class:
package com.example.waitron5; import android.os.Parcel; import android.os.Parcelable; public class MenuItem implements Parcelable { private String name; private double price; private int qty; private String info; public MenuItem(String name, double price) { super(); this.name = name; this.price = price; } public MenuItem() { // TODO Auto-generated constructor stub } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getQty() { return qty; } public void setQty(int qty) { this.qty = qty; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Override public String toString() { return name; } //Parcelable methods. public static final Parcelable.Creator<MenuItem> CREATOR = new Parcelable.Creator<MenuItem>() { @Override public MenuItem createFromParcel(Parcel source) { return new MenuItem(source); } @Override public MenuItem[] newArray(int size) { return new MenuItem[size]; } }; public MenuItem(Parcel source) { this(); readFromParcel(source); } private void readFromParcel(Parcel source) { name = source.readString(); price = source.readDouble(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeDouble(price); } }任何想法可能是什么回事?
Any ideas as to what may be happening?
推荐答案我固定我的问题。问题如下:
I fixed my problem. The issue was as follows:
在Order类。
public void writeToParcel(Parcel dest, int flags) { dest.writeInt(covers); dest.writeInt(table); dest.writeList(items); }应该是:
public void writeToParcel(Parcel dest, int flags) { dest.writeInt(covers); dest.writeInt(table); dest.writeTypedList(items); }和
private void readFromParcel(Parcel source) { covers = source.readInt(); table = source.readInt(); source.readList(items, null); }应该是:
private void readFromParcel(Parcel source) { covers = source.readInt(); table = source.readInt(); items = new ArrayList<MenuItem>(); source.readTypedList(items, MenuItem.CREATOR); }更多推荐
尝试从地块数据
发布评论