当我发送对象时,我无法解决问题" filmovi"到另一个活动我得到了一个错误。当我试图发送另一个物体" korisnik"它没有任何问题。
错误
FATAL EXCEPTION: main
java.lang.ClassCastException: ba.fit.kino.model.filmovi cannot be cast to android.os.Parcelable
从活动发送
filmovi Film = ((filmovi)lstView.getItemAtPosition(position));
Intent intent = new Intent(getApplicationContext(), RezervacijaActivity.class)
intent.putExtra("Rezervacija", Film);
startActivity(intent);
活动中的回收
filmovi filmoviRezervacija;
Bundle bundle = getIntent().getExtras();
if(bundle != null){
filmoviRezervacija = bundle.getParcelable.("Rezervacija");
}
我解决了这个问题:
public class filmovi implements Parcelable{......
public filmovi (Parcel source)
{
this.setFilmID(source.readInt());
this.setNaziv(source.readString());
this.setCijenaKarte(source.readFloat());
this.setSalaID(source.readInt());
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest,int flags)
{
dest.writeInt(this.filmID);
dest.writeString(this.naziv);
dest.writeFloat(this.cijenaKarte);
dest.writeInt(this.salaID);
}
public static final Parcelable.Creator<filmovi> CREATOR = new Parcelable.Creator<filmovi>() {
@Override
public filmovi createFromParcel(Parcel source) {
return new filmovi(source);
}
@Override
public filmovi[] newArray(int size) {
return new filmovi[size];
}
};
}
答案 0 :(得分:0)
顺便说一下,将关键字符串提取为静态最终值是一种好习惯。这可以确保在您使用它的每个位置都会出现相同的字符串。
答案 1 :(得分:0)
原因是你的filmovi课程不可分割
为了制作电影,或任何课程,可以提供,班级及其所有内部成员应该 实施parcelable interface ,并实现一个松散的 writeToParcel 方法 传播课堂内容。
这里,例如
class MyClass implements parcelable {
private MyMemberDataClass data; <----- must also implement parcelable
void writeToParcel(Parcel dest, int flags) {...}
}
MyClass实现parcelable是不够的。
MyMemberDataClass(即内部成员类)也必须这样做。
这可能会让人感到困惑。在许多情况下,它也没有必要......
相反,请考虑使用您将传递所有内容的活动参数静态对象 您的活动需要参数,而无需包裹它们!:
filmovi Film = ((filmovi)lstView.getItemAtPosition(position));
Intent intent = new Intent(getApplicationContext(), RezervacijaActivity.class)
RezervacijaActivityParams.setValue(Film); <--------------- instead of putExtra()
startActivity(intent);
其中:
class RezervacijaActivityParams {
private static filmovi Film;
public static void getValue(filmovi f) { Film = f; }
public static filmovi getValue() { return Film; }
}
和RezervacijaActivity的onCreate:
class RezervacijaActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
filmovi = RezervacijaActivityParams.getValue();
RezervacijaActivityParams.setValue(null); <---------- clear static data
}
}
请注意,这也是对kcoppock评论的回答,这是一个很好的做法 您的活动在检索后立即清除静态数据。