我有一个List<Movie>,我想从一项活动传递到另一项活动:

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(), "CLICKED", Toast.LENGTH_LONG).show();
                Intent i = new Intent(getApplicationContext(), IndividualMovieActivity.class);
                i.putExtra("Movie", mMovieResultsList.get(position));
                startActivity(i);


电影型号:

public class Movie implements Parcelable {

private int vote_count;
private int id;
private boolean video;
private String title;
private float popularity;
private String poster_path;
private String original_language;
private String original_title;
private ArrayList<String> genre_ids;
private String backdrop_path;
private boolean adult;
private String overview;
private Date release_date;

public Movie(){

}

public Movie(int vote_count, int id, boolean video, String title, float popularity, String poster_path, String original_language, String original_title, ArrayList<String> genre_ids, String backdrop_path, boolean adult, String overview, Date release_date) {
    this.vote_count = vote_count;
    this.id = id;
    this.video = video;
    this.title = title;
    this.popularity = popularity;
    this.poster_path = poster_path;
    this.original_language = original_language;
    this.original_title = original_title;
    this.genre_ids = genre_ids;
    this.backdrop_path = backdrop_path;
    this.adult = adult;
    this.overview = overview;
    this.release_date = release_date;
}

protected Movie(Parcel in) {
    vote_count = in.readInt();
    id = in.readInt();
    video = in.readByte() != 0;
    title = in.readString();
    popularity = in.readFloat();
    poster_path = in.readString();
    original_language = in.readString();
    original_title = in.readString();
    genre_ids = in.createStringArrayList();
    backdrop_path = in.readString();
    adult = in.readByte() != 0;
    overview = in.readString();
}

public static final Creator<Movie> CREATOR = new Creator<Movie>() {
    @Override
    public Movie createFromParcel(Parcel in) {
        return new Movie(in);
    }

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

public void setVote_count(int vote_count) {
    this.vote_count = vote_count;
}

public void setId(int id) {
    this.id = id;
}

public void setVideo(boolean video) {
    this.video = video;
}

public void setTitle(String title) {
    this.title = title;
}

public void setPopularity(float popularity) {
    this.popularity = popularity;
}

public void setPoster_path(String poster_path) {
    this.poster_path = poster_path;
}

public void setOriginal_language(String original_language) {
    this.original_language = original_language;
}

public void setOriginal_title(String original_title) {
    this.original_title = original_title;
}

public void setGenre_ids(ArrayList<String> genre_ids) {
    this.genre_ids = genre_ids;
}

public void setBackdrop_path(String backdrop_path) {
    this.backdrop_path = backdrop_path;
}

public void setAdult(boolean adult) {
    this.adult = adult;
}

public void setOverview(String overview) {
    this.overview = overview;
}

public void setRelease_date(Date release_date) {
    this.release_date = release_date;
}

public int getVote_count() {
    return vote_count;
}

public int getId() {
    return id;
}

public boolean isVideo() {
    return video;
}

public String getTitle() {
    return title;
}

public float getPopularity() {
    return popularity;
}

public String getPoster_path() {
    return poster_path;
}

public String getOriginal_language() {
    return original_language;
}

public String getOriginal_title() {
    return original_title;
}

public ArrayList<String> getGenre_ids() {
    return genre_ids;
}

public String getBackdrop_path() {
    return backdrop_path;
}

public boolean isAdult() {
    return adult;
}

public String getOverview() {
    return overview;
}

public Date getRelease_date() {
    return release_date;
}

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

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeInt(vote_count);
    parcel.writeInt(id);
    parcel.writeBooleanArray(new boolean[]{video});
    parcel.writeString(title);
    parcel.writeFloat(popularity);
    parcel.writeString(poster_path);
    parcel.writeString(original_language);
    parcel.writeString(original_title);
    parcel.writeStringList(genre_ids);
    parcel.writeString(backdrop_path);
    parcel.writeBooleanArray(new boolean[]{adult});
    parcel.writeString(overview);
    parcel.writeString(String.valueOf(release_date));


  }


}

当我尝试获取数据并显示在TextView中时,什么都没有显示,表明我可能没有正确传递数据:

public class IndividualMovieActivity extends AppCompatActivity {

private TextView testText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_individual_movie);

    Intent intent = getIntent();
    Movie movie = intent.getParcelableExtra("Movie");
    String title = movie.getOriginal_title();

    testText = findViewById(R.id.movie_name);
    //no text being displayed
    testText.setText(title);

   }
 }


更新
完整的源代码可以在这里找到:
https://github.com/troy21688/PopularMovies

最佳答案

Pracelable实现中存在错误,这会导致从Parcel读取数据时数据损坏。

您应该使用:

parcel.writeByte(theBoolean ? (byte) 1 : (byte) 0); // replace `theBoolean` with the real variable name


保存布尔值(不是writeBooleanArray)。您的情况是videoadult

07-25 23:40
查看更多