android:使用intent解析Parcelable对象从服务到活动的问题

时间:2011-10-11 06:40:33

标签: java android parcelable

我尝试将Android服务(Order)中的Order(请参阅下面的IntentService对象详细信息)对象传递给使用android Intent的活动,我试过以下方式:

Service课程中的

Bundle b = new Bundle();
b.putParcelable("lastOrder", serverResponse.getOrder());

Activity

Bundle resultData
Order lastOrder = (Order) resultData.getParcelable("lastOrder");

但是我遇到了以下错误:

  1. “解组时的ClassNotFound异常”所以我修复了引用以下链接的问题 http://androidideasblog.blogspot.com/2010/08/classnotfound-exception-when.html
  2. 现在我得到了“readBundle:bad magic number”
  3. 解组未知类型代码
  4. 有人可以帮我解决这个问题吗?

        public class Order implements Parcelable {
           private Long order_id;
           private String order_source;
           private ArrayList<OrderItem> items;
           private Shop shop;
            .....
    
             @Override
            public void writeToParcel(Parcel out, int flags) {
             out.writeLong(order_id);
             Bundle b = new Bundle();
                b.putParcelableArrayList("OrderItems", items);
                out.writeBundle(b);
    
               // out.writeList(items);
                out.writeParcelable(shop, 1);
            }
    
             public static final Parcelable.Creator<Order> CREATOR = new Parcelable.Creator<Order>() {
                public Order createFromParcel(Parcel in) {
                    return new Order(in);
                }
    
                public Order[] newArray(int size) {
                    return new Order[size];
                }
            };
    
            private Order(Parcel in) {
               this.order_id = in.readLong();
                 Bundle b = in.readBundle(OrderItem.class.getClassLoader());        
                this.items = b.getParcelableArrayList("OrderItems");
    
                //this.items = in.readArrayList(getClass().getClassLoader());
                this.shop = in.readParcelable(Shop.class.getClassLoader());
            }
        }
    
     // // // // // // // // // // // // // // // // // // // // // // // // //
       public class Shop implements Parcelable {
    
            private Long shop_id;
            private String shop_date;
            private String shop_code;   
            .....
             @Override
            public void writeToParcel(Parcel out, int flags) {
                out.writeLong(shop_id);
                out.writeString(shop_date);
                out.writeString(shop_code);
            }
    
             public static final Parcelable.Creator<Shop> CREATOR = new Parcelable.Creator<Shop>() {
                public Shop createFromParcel(Parcel in) {
                    return new Shop(in);
                }
    
                public Shop[] newArray(int size) {
                    return new Shop[size];
                }
            };
    
            private Shop(Parcel in) {
                this.shop_id = in.readLong();
                this.shop_date = in.readString();
                this.shop_code = in.readString();
                }
        }
    
    // // // // // // // // // // // // // // // // // // // // // // // // //
        public class OrderItem implements Parcelable {
            private Long order_item_id;
            private Product product;
            private ProductCategory product_Category;
            private ArrayList<OrderExtra> extras;
    
            .....
             @Override
            public void writeToParcel(Parcel out, int flags) {
                out.writeLong(order_item_id);
                out.writeParcelable(product,1 );
                out.writeParcelable(product_Category, 1);
                //out.writeList(extras); http://androidideasblog.blogspot.com/2010/08/classnotfound-exception-when.html
                 Bundle b = new Bundle();
                b.putParcelableArrayList("OrderExtras", extras);
                out.writeBundle(b);
            }
    
             public static final Parcelable.Creator<OrderItem> CREATOR = new Parcelable.Creator<OrderItem>() {
                public OrderItem createFromParcel(Parcel in) {
                    return new OrderItem(in);
                }
    
                public OrderItem[] newArray(int size) {
                    return new OrderItem[size];
                }
            };
    
            private OrderItem(Parcel in) {
                this.order_item_id = in.readLong();
                this.product = in.readParcelable(getClass().getClassLoader());
                this.product_Category = in.readParcelable(getClass().getClassLoader());
                //this.extras = in.readArrayList(getClass().getClassLoader());
    
                Bundle b = in.readBundle(OrderExtra.class.getClassLoader());        
                this.extras = b.getParcelableArrayList("OrderExtras");
    
            }
        }
        // // // // // // // // // // // // // // // // // // // // // // // // //
        public class Product implements Parcelable {
            private Long product_id;
            private String product_date;
            private String product_name;
    
            .....
             @Override
            public void writeToParcel(Parcel out, int flags) {
            out.writeLong(product_id);
                out.writeString(product_date);
                out.writeString(product_name);
            }
    
              public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>() {
                public Product createFromParcel(Parcel in) {
                    return new Product(in);
                }
    
                public Product[] newArray(int size) {
                    return new Product[size];
                }
            };
    
            private Product(Parcel in) {
                this.product_id = in.readLong();
                this.product_date = in.readString();
                this.product_name = in.readString();
            }
        }
    
    // // // // // // // // // // // // // // // // // // // // // // // // //
        public class ProductCategory implements Parcelable {
            private Long product_category_id;
            private String product_category_date;
            private String product_category_name;
    
                .....
                 @Override
            public void writeToParcel(Parcel out, int flags) {
               out.writeLong(product_category_id);
                out.writeString(product_category_date);
                out.writeString(product_category_name);
    
            }
    
            public static final Parcelable.Creator<ProductCategory> CREATOR = new Parcelable.Creator<ProductCategory>() {
                public ProductCategory createFromParcel(Parcel in) {
                    return new ProductCategory(in);
                }
    
                public ProductCategory[] newArray(int size) {
                    return new ProductCategory[size];
                }
            };
    
            private ProductCategory(Parcel in) {
                this.product_category_id = in.readLong();
                this.product_category_date = in.readString();
                this.product_category_name = in.readString();
            }
        }
    
        // // // // // // // // // // // // // // // // // // // // // // // // //
        public class OrderExtra implements Parcelable {
            private Long order_item_extra_id;
            private String order_item_extra_price;
            private String order_item_extra_name;
    
             @Override
            public void writeToParcel(Parcel out, int flags) {
             out.writeLong(order_item_extra_id);
               out.writeString(order_item_extra_price);
                out.writeString(order_item_extra_name);
            }
    
    
             public static final Parcelable.Creator<OrderExtra> CREATOR = new Parcelable.Creator<OrderExtra>() {
                public OrderExtra createFromParcel(Parcel in) {
                    return new OrderExtra(in);
                }
    
                public OrderExtra[] newArray(int size) {
                    return new OrderExtra[size];
                }
            };
    
            private OrderExtra(Parcel in) {
                this.order_item_extra_id = in.readLong();
                this.order_item_extra_price= in.readString();
                this.order_item_extra_name= in.readString();
            }
        }
    

0 个答案:

没有答案