2011-09-13 16 views
11

tengo que pasar de una actividad a otra actividad:Android parcelable - RetailerOrderActivity.java devolver null

tengo SalesProduct clase enetity:

public class Product implements Parcelable{ 

    private double availableQuantity; 
    private double price; 
    private String productCode; 
    private String description; 
    private String description2; 
    private String productGroup; 
    private String alternateSearch; 
    private String productTypeCode; 
    private String nonStockItemFlag; 
    private String salableFlag; 
    private double weight; 
    private double qty; 
    private double grossValue; 
    private double value; 
    private ArrayList<Product> product; 


    public Product() { 

    } 
    public Product(Parcel in) { 
     this(); 
      readFromParcel(in); 
    } 

     /* 
     * Constructor calls read to create object 
     */ 
     private void readFromParcel(Parcel in) { 
      in.readTypedList(product, Product.CREATOR); /* NULLPOINTER HERE */ 
     } 

     public int describeContents() { 
      return 0; 
     } 

     public void writeToParcel(Parcel dest, int flags) { 
       dest.writeList(product); 
     } 

     public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>() { 
      public Product createFromParcel(Parcel in) { 
       Product prod = new Product(); 
       Bundle b = in.readBundle(Product.class.getClassLoader());   
       prod.product = b.getParcelableArrayList("enteredProduct"); 

      return prod; 
      } 

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

    /** 
    * @param product 
    */ 
    public Product(ArrayList<Product> product) { 
     this.product = product; 
    } 

    /** 
    * @param availableQuantity 
    * @param price 
    * @param productCode 
    * @param description 
    * @param nonStockItemFlag 
    * @param kitProductFlag 
    * @param qty 
    * @param grossValue 
    * @param value 
    */ 
    public Product(double availableQuantity, double price, String productCode, 
      String description, String nonStockItemFlag, 
      double qty, double value) { 
     super(); 
     this.availableQuantity = availableQuantity; 
     this.price = price; 
     this.productCode = productCode; 
     this.description = description; 
     this.nonStockItemFlag = nonStockItemFlag; 

     this.qty = qty; 
     this.value = value; 
    } 

    public ArrayList<Product> getProduct() { 
     return product; 
    } 

    public void setProduct(ArrayList<Product> product) { 
     this.product = product; 
    } 

    public double getValue() { 
     return value; 
    } 

    public void setValue(double value) { 
     this.value = value; 
    } 

    public double getGrossValue() { 
     return grossValue; 
    } 
    public void setGrossValue(double grossValue) { 
     this.grossValue = grossValue; 
    } 
    public double getQty() { 
     return qty; 
    } 
    public void setQty(double qty) { 
     this.qty = qty; 
    } 
    public double getPrice() { 
     return price; 
    } 
    public void setPrice(double price) { 
     this.price = price; 
    } 
    public double getAvailableQuantity() { 
     return availableQuantity; 
    } 
    public void setAvailableQuantity(double availableQuantity) { 
     this.availableQuantity = availableQuantity; 
    } 
    public String getProductCode() { 
     return productCode; 
    } 
    public void setProductCode(String productCode) { 
     this.productCode = productCode; 
    } 
    public String getDescription() { 
     return description; 
    } 
    public void setDescription(String description) { 
     this.description = description; 
    } 
    public String getDescription2() { 
     return description2; 
    } 
    public void setDescription2(String description2) { 
     this.description2 = description2; 
    } 
    public String getProductGroup() { 
     return productGroup; 
    } 
    public void setProductGroup(String productGroup) { 
     this.productGroup = productGroup; 
    } 
    public String getAlternateSearch() { 
     return alternateSearch; 
    } 
    public void setAlternateSearch(String alternateSearch) { 
     this.alternateSearch = alternateSearch; 
    } 
    public String getProductTypeCode() { 
     return productTypeCode; 
    } 
    public void setProductTypeCode(String productTypeCode) { 
     this.productTypeCode = productTypeCode; 
    } 

    public String getNonStockItemFlag() { 
     return nonStockItemFlag; 
    } 
    public void setNonStockItemFlag(String nonStockItemFlag) { 
     this.nonStockItemFlag = nonStockItemFlag; 
    } 

    public String getSalableFlag() { 
     return salableFlag; 
    } 
    public void setSalableFlag(String salableFlag) { 
     this.salableFlag = salableFlag; 
    } 

    public double getWeight() { 
     return weight; 
    } 
    public void setWeight(double weight) { 
     this.weight = weight; 
    } 
    } 

Y Actividad persona que llama:

if(productMap.size() >0){ 
     ArrayList<Product> enteredProductList = new ArrayList<Product>(productMap.values()); 
     Bundle b = new Bundle(); 
     Product pr =new Product(enteredProductList); 
     b.putParcelableArrayList("enteredProduct", enteredProductList); 
     Intent showContent = new Intent(getApplicationContext(),RetailerOrderIActivity.class); 
     showContent.putExtras(b); //Insert the Bundle object in the Intent' Extras 
     startActivity(showContent); 
    }else{ 
     Toast.makeText(RetailerOrderActivity.this," You don't have invoice records" ,Toast.LENGTH_SHORT).show(); 
    } 

y recibir parte:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.order_main); 
    Bundle b = this.getIntent().getExtras(); 

    ArrayList<Product> p = b.getParcelableArrayList("enteredProduct"); 
    System.out.println("-- RetailerOrderIActivity --" + p.size()); 
    for (Product s : p) { 
     System.out.println(" --Qty-" + s.getQty()); 
     System.out.println(" --price -" + s.getPrice()); 
     System.out.println(" --code -" + s.getProductCode()); 
    } 

Esta es mi parte de errores:

 09-13 16:22:43.236: ERROR/AndroidRuntime(343): FATAL EXCEPTION: main 
09-13 16:22:43.236: ERROR/AndroidRuntime(343): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xont.controller/com.xont.controller.sales.RetailerOrderIActivity}: java.lang.NullPointerException 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Looper.loop(Looper.java:123) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at dalvik.system.NativeStart.main(Native Method) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343): Caused by: java.lang.NullPointerException 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at com.xont.entity.Product$1.createFromParcel(Product.java:94) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at com.xont.entity.Product$1.createFromParcel(Product.java:1) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Parcel.readParcelable(Parcel.java:1981) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Parcel.readValue(Parcel.java:1846) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Parcel.readListInternal(Parcel.java:2092) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Parcel.readArrayList(Parcel.java:1536) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Parcel.readValue(Parcel.java:1867) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Parcel.readMapInternal(Parcel.java:2083) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Bundle.unparcel(Bundle.java:208) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.os.Bundle.getParcelableArrayList(Bundle.java:1144) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at com.xont.controller.sales.RetailerOrderIActivity.onCreate(RetailerOrderIActivity.java:18) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-13 16:22:43.236: ERROR/AndroidRuntime(343):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 

Por favor, ayudar a me..its devuelto nulo ... ¿dónde está equivocada por favor consejo sobre esto?

Gracias de antemano

+0

pregunta similar que preguntó antes también ... http: //stackoverflow.com/questions/7400100/android-parcelable-object-return-null –

Respuesta

42

Aquí es cómo puede pasar un ArrayList como lo probé.

MyListClass.java - clase personalizada

public class MyListClass implements Parcelable{ 

    private int test; 

    public MyListClass() 
    {} 

    public MyListClass(Parcel read){ 
     test = read.readInt(); 
    } 

    public int getTest() { 
     return test; 
    } 

    public void setTest(int test) { 
     this.test = test; 
    } 

    public static final Parcelable.Creator<MyListClass> CREATOR = 
     new Parcelable.Creator<MyListClass>() { 

      @Override 
      public MyListClass createFromParcel(Parcel source) { 
       return new MyListClass(source); 
      } 

      @Override 
      public MyListClass[] newArray(int size) { 
       return new MyListClass[size]; 
      } 
     }; 

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

    @Override 
    public void writeToParcel(Parcel arg0, int arg1) { 
     arg0.writeInt(test); 
    } 
} 

MyParcelable.java

public class MyParcelable implements Parcelable { 

    private List<MyListClass> arrList = new ArrayList<MyListClass>(); 
    private int myInt = 0; 
    private String str = null; 

    public String getStr() { 
     return str; 
    } 

    public void setStr(String str) { 
     this.str = str; 
    } 

    public List<MyListClass> getArrList() { 
     return arrList; 
    } 

    public void setArrList(List<MyListClass> arrList) { 
     this.arrList = arrList; 
    } 

    public int getMyInt() { 
     return myInt; 
    } 

    public void setMyInt(int myInt) { 
     this.myInt = myInt; 
    } 

    MyParcelable() { 
     // initialization 
     arrList = new ArrayList<MyListClass>(); 
    } 

    public MyParcelable(Parcel in) { 
     myInt = in.readInt(); 
     str = in.readString(); 
     in.readTypedList(arrList, MyListClass.CREATOR); 
    } 

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

    @Override 
    public void writeToParcel(Parcel outParcel, int flags) { 
     outParcel.writeInt(myInt); 
     outParcel.writeString(str); 
     outParcel.writeTypedList(arrList); 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() { 

     @Override 
     public MyParcelable createFromParcel(Parcel in) { 
      return new MyParcelable(in); 
     } 

     @Override 
     public MyParcelable[] newArray(int size) { 
      return new MyParcelable[size]; 
     } 
    }; 
} 

MainAcitivty.java

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     arrList.add(new MyListClass()); 
     arrList.get(0).setTest(200); 

     MyParcelable object = new MyParcelable(); 
     object.setMyInt(100); 
     object.setArrList(arrList); 

     Intent intent = new Intent(MainActivity.this,ReceiverParcel.class); 
     intent.putExtra("parcel", object); 
     startActivity(intent); 
    } 

ReceiverParcel.java

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Bundle b = getIntent().getExtras(); 
     MyParcelable object = b.getParcelable("parcel"); 

     System.out.println(object.getArrList().get(0).getTest()); 
     System.out.println(object.getMyInt()); 
} 
+0

ahora tengo una idea clara en parcelable .Gracias ... Funciona bien. – Piraba

+0

@Lalit Poptani Great answer..Gracias .. – Venky

+0

¿qué cambios se requieren si 'MyParcelable' amplía' ParentClass'? #PS: 'ParentClass' es una clase abstracta –

Cuestiones relacionadas