CREATOR 对象在类 com.example.android.movieapp.Movie 上是静态的

问题描述 投票:0回答:1

当我尝试将一个对象发送到另一个

Activity
时,它显示此错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.movieapp/com.example.android.movieapp.DetailActivity}: android.os.BadParcelableException: Parcelable protocol requires the CREATOR object to be static on class com.example.android.movieapp.Movie

这是我的代码:

public class Movie implements Parcelable{
String title;
String image;

public Movie (String title, String image){
    this.title = title;
    this.image = image;
}

public Movie(JSONObject movie) throws JSONException {
    this.title = movie.getString("original_title");
    this.image = movie.getString("poster_path");

}

private Movie (Parcel in){
    title = in.readString();
    image = in.readString();
}

public final Parcelable.Creator<Movie> CREATOR = new Parcelable.Creator<Movie>(){

    @Override
    public Movie createFromParcel(Parcel parcel) {
        return new Movie(parcel);
    }

    @Override
    public Movie[] newArray(int i) {
        return new Movie[i];
    }
};

@Override
public String toString() {
    return title + "--" + image;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(title);
    dest.writeString(image);
}

public String getImage() {
    return image;
}

public String getTitle() {
    return title;
}

}

主要课程:

 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Movie movie = movieAdapter.getItem(position);

                Intent intent = new Intent(getApplication(), DetailActivity.class);
                intent.putExtra("send", movie);
                startActivity(intent);
            }
        });
    }

和详细类:

Movie movie;
    Bundle extras = getIntent().getExtras();

        movie  = extras.getParcelable("send");
        title.setText(movie.title);
java android android-intent parcelable
1个回答
3
投票

例外情况:

...CREATOR 对象在类 com.example.android.movieapp.Movie 上是静态的

此外,来自 Parcelable 文档:

实现 Parcelable 接口的类还必须具有一个名为 CREATOR 的非空静态字段,其类型实现 Parcelable.Creator 接口。

CREATOR
必须是静态的:

public static final Parcelable.Creator<Movie> CREATOR =
© www.soinside.com 2019 - 2024. All rights reserved.