0

I have a problems getting parameters using parcelables. When I call getIntent().getExtras().getParcelable("map"); I have a problem because of a problem with a Vector.

I have 2 parcelable classes:

public class Point implements Parcelable{
private double x;
private double y;
private double z;

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

public Point(Parcel in ) {
    readFromParcel( in );
}

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

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

public void readFromParcel(Parcel in){
    x = in.readDouble();
    y = in.readDouble();
    z = in.readDouble();
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeDouble(x);
    dest.writeDouble(y);
    dest.writeDouble(z);
}   
}

And Map:

    public class Map implements Parcelable{
        private Point start;
        private Point finish;
        private java.util.Vector <Point> travel;


        @Override
        public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    public Map(Parcel in ) {
        readFromParcel( in );
    }

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

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

    public void readFromParcel(Parcel in){
        start = in.readParcelable(Point.class.getClassLoader());
        finish = in.readParcelable(Point.class.getClassLoader());
        Point[] travel = (Point[]) in.readParcelableArray(Point.class.getClassLoader());
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(start, flags);
        dest.writeParcelable(finish, flags);
        dest.writeParcelableArray(travel.toArray(new Point[travel.size()]), flags);
}
}

Then, how can I receive travel? I always have problems in readParcelableArray.

Someone could help me please??

1 Answers1

0

When is almost impossible to find a solution often the problem is the base of this solution.

In my case, the solution consists in using a List instead of a Vector.

Then, in the class Map, I changed the methods readFromParceo and writeToParcel like these:

public void readFromParcel(Parcel in){
    start = in.readParcelable(Point.class.getClassLoader());
    finish = in.readParcelable(Point.class.getClassLoader());
    travel = in.readArrayList(Point.class.getClassLoader());
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeParcelable(start, flags);
    dest.writeParcelable(finish, flags);
    dest.writeList(travel);
}

I hope it'll help somebody in the future.