Passing ArrayList of objects between activity using Parcelable class

GVillani82

I have two activity (A and B). Activity A launches Activity B using startActivityForResult.

From Activity B, for coming back in the Activity A I used the following code:

ArrayList<Articles> selectedArticlesList =null;
...
Intent data = new Intent();
Bundle bundle = new Bundle();  
bundle.putParcelableArrayList("selected-articles", selectedArticlesList);
data.putExtras(bundle);
setResult(RESULT_OK, data);
finish();

where the class Articles implements Parcelable class.

The Activity A overrides the method onActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(data.hasExtra("selected-articles")){
         dettServiziListCorrente = new ArrayList<Articles>();
         dettServiziListCorrente  = data.getExtras().getParcelableArrayList("selected-articles");  
         Articles a = dettServiziListCorrente.get(0);
         Log.i("PRINT DESCRIPTION MEMBER", String.valueOf(a.description));
    }
}

I obtain the following error:

09-11 17:29:24.020: E/AndroidRuntime(21499): FATAL EXCEPTION: main
09-11 17:29:24.020: E/AndroidRuntime(21499): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {host.activity/host.activity.ActivityA}: java.lang.RuntimeException: bad array lengths
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2980)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3023)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.app.ActivityThread.access$1100(ActivityThread.java:123)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Looper.loop(Looper.java:137)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.app.ActivityThread.main(ActivityThread.java:4424)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at java.lang.reflect.Method.invokeNative(Native Method)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at java.lang.reflect.Method.invoke(Method.java:511)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at dalvik.system.NativeStart.main(Native Method)
09-11 17:29:24.020: E/AndroidRuntime(21499): Caused by: java.lang.RuntimeException: bad array lengths
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Parcel.readStringArray(Parcel.java:838)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at host.framework.component.Articles.<init>(Articles.java:30)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at host.framework.component.Articles$1.createFromParcel(Articles.java:56)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at host.framework.component.Articles$1.createFromParcel(Articles.java:1)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Parcel.readParcelable(Parcel.java:1992)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Parcel.readValue(Parcel.java:1854)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Parcel.readListInternal(Parcel.java:2103)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Parcel.readArrayList(Parcel.java:1544)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Parcel.readValue(Parcel.java:1875)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Parcel.readMapInternal(Parcel.java:2094)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Bundle.unparcel(Bundle.java:223)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.os.Bundle.containsKey(Bundle.java:264)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.content.Intent.hasExtra(Intent.java:3754)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at host.activity.ACT_CreazioneOrdine.onActivityResult(ACT_CreazioneOrdine.java:192)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.app.Activity.dispatchActivityResult(Activity.java:4649)
09-11 17:29:24.020: E/AndroidRuntime(21499):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
09-11 17:29:24.020: E/AndroidRuntime(21499):    ... 11 more

My implementation of Articles class is:

public class Articles implements Parcelable{

    public int id;
    public String description;
    public String immagine;
    public int quantita;

    public Articles (int id,String descriprion, String immagine){
        this.id = id;
        this.description = descriprion;
        this.immagine = immagine;   
        this.quantita = 0;
    }

    public Articles (int id,String descriprion, String immagine,int quantita){
        this.id = id;
        this.description = descriprion;
        this.immagine = immagine;   
        this.quantita = quantita;
    }

    public Articles (Parcel in){
        String[] data = new String[3];

        in.readStringArray(data);
        this.id = Integer.parseInt(data[0]);
        this.description = data[1];
        this.immagine = data[2];
        this.quantita = Integer.parseInt(data[3]);
    }

    @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.writeStringArray(new String[] {
                String.valueOf(this.id),
                this.description,
                this.immagine,
                String.valueOf(this.quantita)
            });
    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public Articles createFromParcel(Parcel in) {
            return new Articles (in); 
        }

        public Articles [] newArray(int size) {
            return new Articles [size];
        }
    };
     }
moh.sukhni

the problem is in this function:

public Articles (Parcel in)
{
       String[] data = new String[3];// here you defined array of 3 elements it should be 4
       in.readStringArray(data);
       this.id = Integer.parseInt(data[0]);
       this.description = data[1];
       this.immagine = data[2];
       this.quantita = Integer.parseInt(data[3]);
}

because in this line you are passing four elements:

dest.writeStringArray(new String[]
    { String.valueOf(this.id), this.description, this.immagine, String.valueOf(this.quantita) });

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Passing custom class objects using parcelable

From Dev

Passing Arraylist<CustomObject> using Parcelable, passing null

From Dev

Class to Activity passing ArrayList values

From Dev

Parcelable with arraylist<string> passing value from activity to fragment android

From Dev

Arraylist of parcelable objects not working

From Dev

Passing objects between activities in android why Parcelable ? why not JSON string?

From Dev

Passing objects between activities in android why Parcelable ? why not JSON string?

From Dev

Passing ArrayList from Fragment class to Activity

From Dev

Passing ArrayList from Fragment class to Activity

From Dev

Android Class Parcelable with ArrayList

From Dev

Android Class Parcelable with ArrayList

From Dev

Problems in Parcelable Class using a List of Custom Objects (Defined in an Inner Class)

From Dev

Passing data between Activity and View class

From Dev

Making ArrayList of custom objects parcelable

From Dev

Android: nullPointerException when using Parcelable interface in class with ArrayList<customObject>

From Dev

Pass parcelable object between activity

From Dev

Passing Parcelable Object between Intents

From Dev

Passing Parcelable item between activities

From Dev

Not able to pass parcelable object ArrayList to a fragment activity

From Dev

Parcelable Class with list of a custom objects

From Dev

Does it ocurr serialization when passing objects between Activity's and Fragments

From Dev

Passing some values of an ArrayList of objects into another class java

From Dev

Compress Arraylist or passing arraylist with objects

From Dev

Android Parcelable object not passing properly between activities

From Dev

Android Parcelable object not passing properly between activities

From Dev

Parcelable class returned to parent activity is null

From Dev

Pass HashMap with Custom Parcelable Arraylist between activities

From Dev

Display Class member value using ArrayList of Objects

From Dev

Passing an ArrayList of other Arrays to an Activity

Related Related

  1. 1

    Passing custom class objects using parcelable

  2. 2

    Passing Arraylist<CustomObject> using Parcelable, passing null

  3. 3

    Class to Activity passing ArrayList values

  4. 4

    Parcelable with arraylist<string> passing value from activity to fragment android

  5. 5

    Arraylist of parcelable objects not working

  6. 6

    Passing objects between activities in android why Parcelable ? why not JSON string?

  7. 7

    Passing objects between activities in android why Parcelable ? why not JSON string?

  8. 8

    Passing ArrayList from Fragment class to Activity

  9. 9

    Passing ArrayList from Fragment class to Activity

  10. 10

    Android Class Parcelable with ArrayList

  11. 11

    Android Class Parcelable with ArrayList

  12. 12

    Problems in Parcelable Class using a List of Custom Objects (Defined in an Inner Class)

  13. 13

    Passing data between Activity and View class

  14. 14

    Making ArrayList of custom objects parcelable

  15. 15

    Android: nullPointerException when using Parcelable interface in class with ArrayList<customObject>

  16. 16

    Pass parcelable object between activity

  17. 17

    Passing Parcelable Object between Intents

  18. 18

    Passing Parcelable item between activities

  19. 19

    Not able to pass parcelable object ArrayList to a fragment activity

  20. 20

    Parcelable Class with list of a custom objects

  21. 21

    Does it ocurr serialization when passing objects between Activity's and Fragments

  22. 22

    Passing some values of an ArrayList of objects into another class java

  23. 23

    Compress Arraylist or passing arraylist with objects

  24. 24

    Android Parcelable object not passing properly between activities

  25. 25

    Android Parcelable object not passing properly between activities

  26. 26

    Parcelable class returned to parent activity is null

  27. 27

    Pass HashMap with Custom Parcelable Arraylist between activities

  28. 28

    Display Class member value using ArrayList of Objects

  29. 29

    Passing an ArrayList of other Arrays to an Activity

HotTag

Archive