如何将对象传递给另一个活动

时间:2014-05-12 10:14:16

标签: java android

我有一个从Location类扩展的Placemark类,所以我认为在这种情况下我不能在这里使用“implements Serializable”。如果有人知道如何在这里使用Serializable,请帮助我

public class Placemark extends Location

所以我开始在其他地方使用Parcelable将我的Pl​​acemark对象传递给第二个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)

因此,当从位置扩展地标时,这是第一个问题。我搜索了很多网站,但仍无法解决这种情况

2 个答案:

答案 0 :(得分:1)

1)而不是

 p.writeValue(pm);

pm = (Placemark) p.readValue(Placemark.class.getClassLoader());

尝试写:

 p.writeParcelable(pw, 0);

pm = (Placemark) p.readParcelable(Placemark.class.getClassLoader());

2)您的类Placemark是否实现了Parcelable接口?

答案 1 :(得分:0)

您可以创建Application的子类并将对象存储在那里。 Here就是一个例子。