Mina Fared Mina Fared - 1 month ago 8
Android Question

Android:lossing data when pass arraylist of arraylists from activity to activty

i could to pass an arraylist from activity A to Activity B Successfully. AS Shown below :

At activity A :

Intent intent = new Intent(Activity_A.this, Activity_B.class);
intent.putParcelableArrayListExtra("albums", (ArrayList<? extends Parcelable>) albums);
startActivity(intent);


The Model Album is implemented as below:

public class Album implements Parcelable
{
public ArrayList<Song> Songs = new ArrayList<Song>();
public int id;
public String album_name;
public String pic;



public static final Creator<Album> CREATOR = new Creator<Album>()
{
@Override
public Album createFromParcel(Parcel in)
{
return new Album(in);
}

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

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

@Override
public void writeToParcel(Parcel parcel, int i)
{
parcel.writeInt(id);
parcel.writeString(album_name);
parcel.writeString(pic);
}
}


As Shown the album contain of arraylist of songs and another data

Here is the implementation of Song Model:

public class Song implements Parcelable
{

public int id;
public String file_name;
public String file_url;
public String pic_url;
public int Album_id;


public static final Creator<Song> CREATOR = new Creator<Song>()
{
@Override
public Song createFromParcel(Parcel in)
{
return new Song(in);
}

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


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

@Override
public void writeToParcel(Parcel parcel, int i)
{
parcel.writeInt(id);
parcel.writeString(file_name);
parcel.writeString(file_url);
parcel.writeString(pic_url);
parcel.writeInt(Album_id);

}
}


}


And to get data passed at At activity B :

Bundle bundle = getIntent().getExtras();
ArrayList<Album> albums = bundle.getParcelableArrayList("albums");


The problem here is that Data is passed successfully From Activity A to Activity B But The list of songs is null with size zero for every album although i checked in activity A that every album has list of songs

Answer

Your songs list is empty because you didn't save it to Parcel in writeToParcel(Parcel, int) method in Album class.

Your writeToParcel(Parcel, int) method should look like this:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeTypedList(this.Songs);
    dest.writeInt(this.id);
    dest.writeString(this.album_name);
    dest.writeString(this.pic);
}

And Album(Parcel) like this:

protected Album(Parcel in) {
    this.Songs = in.createTypedArrayList(Song.CREATOR);
    this.id = in.readInt();
    this.album_name = in.readString();
    this.pic = in.readString();
}