【问题标题】:getParcelable() returns object with null data members for Parcelable objectgetParcelable() 为 Parcelable 对象返回具有空数据成员的对象
【发布时间】:2016-05-28 15:18:10
【问题描述】:

我正在 Udacity(Final Project Stage 1)上做这门课程,我需要制作一个热门电影应用程序。 一切都很好,但目前我无法将 Movie 对象传递给我的 DetailsActivity。 Movie 对象是 Parcelable。

    public class Movie implements Parcelable{

    int id;
    String original_title;
    String poster_path;
    String overview;
    String backdrop_path;
    String vote_average;
    String release_date;

    public Movie(String _original_title, String _poster_path,
                 String _overview, String _backdrop_path,
                 String _vote_average, String _release_date, int _id){
        this.original_title = _original_title;
        this.id = _id;
        this.overview = _overview;
        this.poster_path = _poster_path;
        this.backdrop_path = _backdrop_path;
        this.vote_average = _vote_average;
        this.release_date = _release_date;
    }

    protected Movie(Parcel in) {
        id = in.readInt();
        original_title = in.readString();
        overview = in.readString();
        poster_path = in.readString();
        backdrop_path = in.readString();
        vote_average = in.readString();
        release_date = 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];
        }
    };

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(original_title);
        dest.writeString(overview);
        dest.writeString(poster_path);
        dest.writeString(backdrop_path);
        dest.writeString(vote_average);
        dest.writeString(release_date);
        dest.writeInt(id);
    }
}

我正在使用以下代码在活动之间发送和检索数据。

MainActivityFragment.java

Movie mData = mMovieAdapter.getItem(position);
            Log.d("Backdrop Path", mData.backdrop_path+""); // Backdrop Path : http://image.tmdb.org/t/p/w185/m5O3SZvQ6EgD5XXXLPIP1wLppeW.jpg

            Bundle movieData = new Bundle();
            movieData.putParcelable(KEY_DETAIL, mData);

            Intent intent = new Intent(getActivity(), MovieDetailActivity.class);
            intent.putExtras(movieData);
            startActivity(intent);

MovieDetailActivityFragment.java

Bundle data = getActivity().getIntent().getExtras();
    if(data != null)
        movie = data.getParcelable(KEY_DETAIL);  //Movie object

    Log.d("Loading Image", movie.backdrop_path+"");  // Loading Image : null

所以根据日志,我确定被捆绑的 Movie 对象有数据。但是当我在另一个类中检索对象时,对象不是空的,但数据成员是。

【问题讨论】:

  • 好的,我想通了。在Movie.java中,对于Parcelable对象的数据成员,检索顺序应该和我放入的顺序一致。
  • 您将数据从片段传递到片段??
  • 那么,当你按照正确的顺序进行操作时会发生什么?

标签: android android-intent android-activity parcelable


【解决方案1】:

对我来说,解决方案是将读/写方法更改为以相同的顺序读/写每个对象成员。

问候

【讨论】:

  • 请删除它并改用 cmets,因为您的帖子不是答案我不知道为什么会发生这种情况
  • 我和这个用户有同样的问题,用这个(按你写信的顺序阅读)确实解决了这个问题。所以对我来说,这是对用户问题的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多