Android 通过Parcelable获取错误的对象类型

Android 通过Parcelable获取错误的对象类型,android,android-intent,android-activity,casting,parcelable,Android,Android Intent,Android Activity,Casting,Parcelable,我有两个实现Parcelable的类。我试图通过一个意图将每个类的一个对象传递给一个活动。但是,当我尝试访问其中一个对象时,它认为它是另一个对象的类型,并尝试强制转换它 头等舱 public class Track implements Parcelable{ private String trackOwner; private String trackName; private Double sumDistace; public final static String POINTTOPOI

我有两个实现Parcelable的类。我试图通过一个意图将每个类的一个对象传递给一个活动。但是,当我尝试访问其中一个对象时,它认为它是另一个对象的类型,并尝试强制转换它

头等舱

public class Track implements Parcelable{

private String trackOwner;
private String trackName;
private Double sumDistace;

public final static String POINTTOPOINT = "POINTTOPOINT";
public final static String CIRCUIT = "CIRCUIT";

private String trackType;
private ArrayList<Checkpoint> checkpoints;

public Track(String trackOwner, String trackName, String trackType, Double sumDistace){

    this.trackOwner = trackOwner;
    this.trackName = trackName;
    this.trackType = trackType;
    checkpoints = new ArrayList<Checkpoint>();
    this.sumDistace = sumDistace;

}

public Track(){

}

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

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

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

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

public String getTrackOwner(){
    return this.trackOwner;
}

public String getTrackName(){
    return this.trackName;
}

public String getTrackType(){
    return this.trackType;
}

public Double getSumDistace(){return this.sumDistace; }

public void setCheckpoints(ArrayList<Checkpoint> checkpoints){
    this.checkpoints = checkpoints;
}

public void setSumDistace(double sumDistace){
    this.sumDistace = sumDistace;
}

public void addCheckpoint(Checkpoint checkpoint){
    checkpoints.add(checkpoint);
}

public ArrayList<Checkpoint> getCheckpoints(){
    return this.checkpoints;
}


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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(trackOwner);
    dest.writeString(trackName);
    dest.writeString(trackType);
    dest.writeTypedList(checkpoints);
    dest.writeDouble(sumDistace);

}

public void readFromParcel(Parcel in){
    trackOwner = in.readString();
    trackName = in.readString();
    trackType = in.readString();
    in.readTypedList(checkpoints,Checkpoint.CREATOR);
    sumDistace = in.readDouble();
}
}
我收到的例外情况

04-04 23:34:51.725 27284-27284/com.illbirdstudios.illbird.streetsend D/Exception:: java.lang.ClassCastException: com.illbirdstudios.illbird.streetsend.User cannot be cast to com.illbirdstudios.illbird.streetsend.Track
试试这个

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

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

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

按计划工作。。。检查
Track.CREATOR.createFromParcel
返回的内容。。。这就是为什么害羞&粘贴而不思考的结果
Track track = getIntent().getExtras().getParcelable("track");
User user = getIntent().getExtras().getParcelable("user");
04-04 23:34:51.725 27284-27284/com.illbirdstudios.illbird.streetsend D/Exception:: java.lang.ClassCastException: com.illbirdstudios.illbird.streetsend.User cannot be cast to com.illbirdstudios.illbird.streetsend.Track
public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){

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

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