0
我有一個包含MenuItem對象的ArrayList的Order對象。這兩個類都實現了Parcelable接口。嘗試從包裹中檢索數據
當我試圖找回從意向對象的新的活動我得到以下錯誤:
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
這裏就是我送訂單對象的代碼:
i = new Intent(v.getContext(), SectionsActivity.class);
i.putExtra("data", order);
startActivity(i);
這裏是我檢索訂單對象的母鹿:
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();
訂單級別:
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類:
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);
}
}
任何想法,以什麼可能會發生?
很好的解決方案!沒想到使用非原始數據類型導致Parcelables像這樣失敗。 – Codeman