0

I want to pass my object oManagement from activity X to Y.

In X:

oManagement = new OrdersManagement(); myIntent = new Intent(this, Y.class); 

Then I fill my oManagement object with separate thread.

Then I am waiting when oManagement filled and start another activity:

while (oManagement.allOrders.size() == 0) { try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } if (oManagement.allOrders.size() > 0) { myIntent.putExtra("OrdersManagementObject", oManagement); this.startActivity(myIntent); } } 

And in my Y Activity:

Bundle b = this.getIntent().getExtras(); if (b != null) { oManagement = b.getParcelable("OrdersManagementObject"); } 

And now surprise -> oManagement is not null, but oManagement.allOrders.size() is 0! :( So i pass my object, but ArrayList inside by object is 0 (in moment of passing was 1 element inside that Array).

How to fix that?

EDIT:

OrdersManagement class:

public class OrdersManagement implements Parcelable { public ArrayList<QuantorsOrder> allOrders = new ArrayList<QuantorsOrder>(); public OrdersManagement() { } public OrdersManagement(Parcel in) { } public static final Creator<OrdersManagement> CREATOR = new Creator<OrdersManagement>() { @Override public OrdersManagement createFromParcel(Parcel in) { return new OrdersManagement(in); } @Override public OrdersManagement[] newArray(int size) { return new OrdersManagement[size]; } }; public void updateListOfOrders(JSONArray jsonArray) throws JSONException { if (jsonArray != null && jsonArray.length() > 0) { JSONObject json; for (int i = 0; i < jsonArray.length(); i++) { json = (JSONObject)jsonArray.get(i); if(!IsOrderAlreadyExists(json)) addOrder(json); } } } private boolean IsOrderAlreadyExists(JSONObject json) throws JSONException { if (allOrders.isEmpty()) return false; else { for(QuantorsOrder order : allOrders) { if (String.valueOf(order.getId()).equals(json.get("id").toString())) { return true; } } return false; } } private void addOrder(JSONObject json) throws JSONException { allOrders.add(new QuantorsOrder(json)); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { } } 
12
  • 1
    We probably need to see the source for the OrdersManagement class. Possible that there is a parceling problem there. Commented Sep 13, 2016 at 16:21
  • It appears your startActivity() resides in an infinite loop Commented Sep 13, 2016 at 16:26
  • check how you are extracting the key in your second activity. I will declare the key like this in first activity. public final static String EXTRA_ORDERSMANAGEMENT = "OrdersManagementObject"; Then i will extract the key in second activity like this Bundle b = this.getIntent().getExtras(MainActivity.EXTRA_ORDERSMANAGEMENT); Commented Sep 13, 2016 at 16:27
  • 1
    How does while (oManagement.allOrders.size() == 0) work when you have if (oManagement.allOrders.size() > 0) inside that loop? Commented Sep 13, 2016 at 16:30
  • could you show OrdersManagement class ? Commented Sep 13, 2016 at 16:30

1 Answer 1

2

Your QuantorsOrdershould also implement Parcelable. And in writeToParcel() method you should write the list and read it in constructor like this:

public void writeToParcel(Parcel out, int flags) { out.writeTypedList(allOrders); } private OrdersManagement (Parcel in) { in.readTypedList(allOrders, QuantorsOrder.CREATOR); } 

You should also implement the logic of writing and reading field in your QuantorsOrder class. Here is example on simple class:

 public class MyParcelable implements Parcelable { private int mData; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(mData); } public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() { public MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } public MyParcelable[] newArray(int size) { return new MyParcelable[size]; } }; public MyParcelable(Parcel in) { mData = in.readInt(); } } 

The main thing here is happening in writeToParcel(...) method and in constructor public MyParcelable(Parcel in).

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.