Android 通过Parcelable获取错误的对象类型
我有两个实现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
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];
}
};