【发布时间】:2014-05-12 10:14:16
【问题描述】:
我有一个从 Location 类扩展的 Placemark 类,所以我认为在这种情况下我不能在这里使用“实现可序列化”。如果有人知道如何在这里使用 Serializable,请帮助我
public class Placemark extends Location
所以我开始在 other 中使用 Parcelable 将我的 Placemark 对象传递给第二个 Activity
public class DataPass implements Parcelable{
private Placemark pm;
public DataPass()
{}
public DataPass(Parcel p)
{
pm = (Placemark) p.readValue(Placemark.class.getClassLoader()); //<~~ may cause problem here
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel p, int flags) {
p.writeValue(pm);
}
public Placemark getPM() {
return pm;
}
public void setPM(Placemark pm) {
this.pm = pm;
}
public static Parcelable.Creator<DataPass> CREATOR = new Parcelable.Creator<DataPass>() {
@Override
public DataPass createFromParcel(Parcel source) {
return new DataPass(source);
}
@Override
public DataPass[] newArray(int size) {
return new DataPass[size];
}
};
}
然后从当前活动中调用 putExtra(String, Parcelable) 和 startActivity。
DataPass data = new DataPass();
data.setPM(myPlacemark);
mapintent.putExtra("p", data);
startActivity(mapintent);
然后检索它
Bundle bd = getIntent().getExtras();
try {
DataPass data = bd.getParcelable("p"); //<~~ Exception
Placemark pm = data.getPM();
} catch (Exception e)
{
Log.e("error", e.toString());
}
当我运行这段代码时,我遇到了一个异常 DataPass 数据 = bd.getParcelable("p");
cause: ClassCastException
detailMessage: Location cannot be cast to Placemark)
因此,当从位置扩展地标时,这又是第一个问题。我搜索了很多网站,但仍然无法解决这种情况
【问题讨论】: