活动之间传递对象包含NULL [英] Passing Object between Activity contains NULL

查看:106
本文介绍了活动之间传递对象包含NULL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个活动(Order和OrderReview)从中我送对象从OrderActivity到OrderReviewActivity。该对象为空时,我检索它在OrderReview活动。

I have 2 activity(Order and OrderReview) from which I am sending object from OrderActivity to OrderReviewActivity. The object is NULL when i retrieve it in the OrderReview activity.

订货活动

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.send_menu:                
            showOrderReview();
            break;
    }
    return true;
}

private void showOrderReview()
{
    // TODO Auto-generated method stub
    Intent i = new Intent(this, ReviewOrderActivity.class);
    i.putExtra("order",order);
    Collection<Order.OrderProduct> products = order.getProducts();
    System.out.println("OrderActivity : " + products.size());

    for (Order.OrderProduct product : products){
        Log.d("---", "OrderActivity product.getQty() "+product.getQty()+"  "+product.getProductId());

    }
    startActivity(i); 
}

OrderReviewActivity

public class ReviewOrderActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.orderreview);

    Intent i = getIntent();
    Order myOrderObject = (Order) i.getParcelableExtra("order");
    Collection<Order.OrderProduct> products = myOrderObject.getProducts();
    System.out.println("Orderrrrrrrrrrrr : " + products.size());

    for (Order.OrderProduct product : products){
        Log.d("---", " product.getQty() "+product.getQty()+"  "+product.getProductId());

    }       
}
}

Order.java

public class Order implements Parcelable {

public static class OrderProduct {
    private String productId;
    private String qty;

    public OrderProduct(String productId, String qty) {
        this.productId = productId;
        this.qty = qty;
    }

    public String getProductId() {
        return productId;
    }

    public String getQty() {
        return qty;
    }

    public void setQty(String qty) {
        this.qty = qty;
    }

    @Override
    public String toString() {
        return "productId: " + productId + "  qty: " + qty;
    }   

}

private String  customerId;
private Map<String, OrderProduct> products;
private OrderProduct product;

public Order(String customerId) {
    Log.v("TAG", "Order constr 1");
    this.customerId = customerId;
    products = new HashMap<String, OrderProduct>();
}

public Order(Parcel in)
{
    Log.v("TAG", "ParcelData(Parcel source): time to put back parcel data");
    String productId = in.readString(); 
    String qty = in.readString(); 
    Log.v("TAG", productId +" qty: "+qty);
    product = new OrderProduct(productId, qty); 
    products = new HashMap<String, OrderProduct>();
}

public void setProduct(String productId, String qty) {
    product = products.get(productId);
    if (product == null) {
        product = new OrderProduct(productId, qty);
    }
    else {
        product.setQty(qty);
    }
    products.put(productId, product);
}

public Collection<OrderProduct> getProducts() {
    return products.values();
}

public String getCustomerId() {
    return customerId;
}

@Override
public String toString() {
    StringBuffer sb = new StringBuffer();
    sb.append("Order: customerId: " + customerId + " { ");
    for (OrderProduct product : products.values()) {
        sb.append(" { ").append(product.toString()).append(" } ");
    }
    sb.append(" } ");
    return sb.toString();
}


@Override
public int describeContents()
{
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags)
{
    // TODO Auto-generated method stub
    System.out.println("INSIDE product.getProductId()" +product.getProductId());
    dest.writeString(product.getProductId());
    System.out.println("INSIDE product.getQty()" +product.getQty());
    dest.writeString(product.getQty());
}

public static final Order.Creator<Order> CREATOR = new Order.Creator<Order>() { 
    public Order createFromParcel(Parcel in) { 
        return new Order(in); 
    } 

    public Order[] newArray(int size) { 
        return new Order[size]; 
    } 
};  

}

推荐答案

而不是使用i.getParcelableExtra(订单)中,使用i.getSerializableExtra(订单)。希望它的工作原理

Instead of using i.getParcelableExtra("order"), use i.getSerializableExtra("order"). Hope it works

这篇关于活动之间传递对象包含NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆