2015-08-28 66 views
0

我审阅了关于这样类似的问题,但我还没有达到所需的结果通行证对象从一个活动实现Parcelable到另一个活动

我是从电影数据库服务器提取数据,我认为解析数据使用杰克逊和我创建这个对象,我需要在我的活动中实现parcelable我想要将这些对象的列表添加到onSaveInstanceState方法中的包。

import android.os.Parcel; 
import android.os.Parcelable; 

import com.fasterxml.jackson.annotation.JsonProperty; 

import java.util.ArrayList; 
import java.util.List; 

public class Movie implements Parcelable{ 

@JsonProperty("adult") 
private Boolean adult; 
@JsonProperty("backdrop_path") 
private String backdropPath; 
@JsonProperty("genre_ids") 
private List<Integer> genreIds = new ArrayList<Integer>(); 
@JsonProperty("id") 
private Integer id; 
@JsonProperty("original_language") 
private String originalLanguage; 
@JsonProperty("original_title") 
private String originalTitle; 
@JsonProperty("overview") 
private String overview; 
@JsonProperty("release_date") 
private String releaseDate; 
@JsonProperty("poster_path") 
private String posterPath; 
@JsonProperty("popularity") 
private Double popularity; 
@JsonProperty("title") 
private String title; 
@JsonProperty("video") 
private Boolean video; 
@JsonProperty("vote_average") 
private Double voteAverage; 
@JsonProperty("vote_count") 
private Integer voteCount; 

public Movie(){} 

private Movie(Parcel in){ 

    adult = (in.readInt() == 0) ? false : true; 
    backdropPath = in.readString(); 
    genreIds = in.readArrayList(List.class.getClassLoader()); 
    id = in.readInt(); 
    originalLanguage = in.readString(); 
    originalTitle = in.readString(); 
    overview = in.readString(); 
    releaseDate = in.readString(); 
    posterPath = in.readString(); 
    popularity = in.readDouble(); 
    title = in.readString(); 
    video = (in.readInt() == 0) ? false : true; 
    voteAverage = in.readDouble(); 
    voteCount = in.readInt(); 
} 

/** 
* 
* @return 
* The adult 
*/ 
@JsonProperty("adult") 
public Boolean getAdult() {return adult;} 

/** 
* 
* @param adult 
* The adult 
*/ 
@JsonProperty("adult") 
public void setAdult(Boolean adult) {this.adult = adult;} 

/** 
* 
* @return 
* The backdropPath 
*/ 
@JsonProperty("backdrop_path") 
public String getBackdropPath() {return backdropPath;} 

/** 
* 
* @param backdropPath 
* The backdrop_path 
*/ 
@JsonProperty("backdrop_path") 
public void setBackdropPath(String backdropPath) {this.backdropPath = backdropPath;} 

/** 
* 
* @return 
* The genreIds 
*/ 
@JsonProperty("genre_ids") 
public List<Integer> getGenreIds() {return genreIds;} 

/** 
* 
* @param genreIds 
* The genre_ids 
*/ 
@JsonProperty("genre_ids") 
public void setGenreIds(List<Integer> genreIds) {this.genreIds = genreIds;} 

/** 
* 
* @return 
* The id 
*/ 
@JsonProperty("id") 
public Integer getId() {return id;} 

/** 
* 
* @param id 
* The id 
*/ 
@JsonProperty("id") 
public void setId(Integer id) {this.id = id;} 

/** 
* 
* @return 
* The originalLanguage 
*/ 
@JsonProperty("original_language") 
public String getOriginalLanguage() {return originalLanguage;} 

/** 
* 
* @param originalLanguage 
* The original_language 
*/ 
@JsonProperty("original_language") 
public void setOriginalLanguage(String originalLanguage) {this.originalLanguage = originalLanguage;} 

/** 
* 
* @return 
* The originalTitle 
*/ 
@JsonProperty("original_title") 
public String getOriginalTitle() {return originalTitle;} 

/** 
* 
* @param originalTitle 
* The original_title 
*/ 
@JsonProperty("original_title") 
public void setOriginalTitle(String originalTitle) {this.originalTitle = originalTitle;} 

/** 
* 
* @return 
* The overview 
*/ 
@JsonProperty("overview") 
public String getOverview() {return overview;} 

/** 
* 
* @param overview 
* The overview 
*/ 
@JsonProperty("overview") 
public void setOverview(String overview) {this.overview = overview;} 

/** 
* 
* @return 
* The releaseDate 
*/ 
@JsonProperty("release_date") 
public String getReleaseDate() {return releaseDate;} 

/** 
* 
* @param releaseDate 
* The release_date 
*/ 
@JsonProperty("release_date") 
public void setReleaseDate(String releaseDate) {this.releaseDate = releaseDate;} 

/** 
* 
* @return 
* The posterPath 
*/ 
@JsonProperty("poster_path") 
public String getPosterPath() {return posterPath;} 

/** 
* 
* @param posterPath 
* The poster_path 
*/ 
@JsonProperty("poster_path") 
public void setPosterPath(String posterPath) {this.posterPath = posterPath;} 

/** 
* 
* @return 
* The popularity 
*/ 
@JsonProperty("popularity") 
public Double getPopularity() {return popularity;} 

/** 
* 
* @param popularity 
* The popularity 
*/ 
@JsonProperty("popularity") 
public void setPopularity(Double popularity) {this.popularity = popularity;} 

/** 
* 
* @return 
* The title 
*/ 
@JsonProperty("title") 
public String getTitle() {return title;} 

/** 
* 
* @param title 
* The title 
*/ 
@JsonProperty("title") 
public void setTitle(String title) {this.title = title;} 

/** 
* 
* @return 
* The video 
*/ 
@JsonProperty("video") 
public Boolean getVideo() { 
    return video; 
} 

/** 
* 
* @param video 
* The video 
*/ 
@JsonProperty("video") 
public void setVideo(Boolean video) {this.video = video;} 

/** 
* 
* @return 
* The voteAverage 
*/ 
@JsonProperty("vote_average") 
public Double getVoteAverage() {return voteAverage;} 

/** 
* 
* @param voteAverage 
* The vote_average 
*/ 
@JsonProperty("vote_average") 
public void setVoteAverage(Double voteAverage) {this.voteAverage = voteAverage;} 

/** 
* 
* @return 
* The voteCount 
*/ 
@JsonProperty("vote_count") 
public Integer getVoteCount() {return voteCount;} 

/** 
* 
* @param voteCount 
* The vote_count 
*/ 
@JsonProperty("vote_count") 
public void setVoteCount(Integer voteCount) {this.voteCount = voteCount;} 


/** 
* 
* @param genreIds takes list of genre Ids 
* @return list of String Genres 
*/ 
public ArrayList<String> getGenres(List<Integer> genreIds){ 
    ArrayList<String> genres = new ArrayList<>(); 

    for(int genreId :genreIds) { 
     switch (genreId) { 
      case 28: 
       genres.add("Action"); 
       break; 
      case 12: 
       genres.add("Adventure"); 
       break; 
      case 16: 
       genres.add("Animation"); 
       break; 
      case 35: 
       genres.add("Comedy"); 
       break; 
      case 80: 
       genres.add("Crime"); 
       break; 
      case 99: 
       genres.add("Documentary"); 
       break; 
      case 18: 
       genres.add("Drama"); 
       break; 
      case 10751: 
       genres.add("Family"); 
       break; 
      case 14: 
       genres.add("Fantasy"); 
       break; 
      case 10796: 
       genres.add("Foreign"); 
       break; 
      case 36: 
       genres.add("History"); 
       break; 
      case 27: 
       genres.add("Horror"); 
       break; 
      case 10402: 
       genres.add("Music"); 
       break; 
      case 9648: 
       genres.add("Mystery"); 
       break; 
      case 10747: 
       genres.add("Animation"); 
       break; 
      case 878: 
       genres.add("Science Fiction"); 
       break; 
      case 10770: 
       genres.add("TV Movie"); 
       break; 
      case 53: 
       genres.add("Thriller"); 
       break; 
      case 10752: 
       genres.add("War"); 
       break; 
      case 37: 
       genres.add("Western"); 
       break; 

      default: 
       break; 
     } 
    } 
    return genres; 
} 

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

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(adult ? 1 : 0); 
    dest.writeString(backdropPath); 
    dest.writeList(genreIds); 
    dest.writeInt(id); 
    dest.writeString(originalLanguage); 
    dest.writeString(originalTitle); 
    dest.writeString(overview); 
    dest.writeString(releaseDate); 
    dest.writeString(posterPath); 
    dest.writeDouble(popularity); 
    dest.writeString(title); 
    dest.writeInt(video ? 1 : 0); 
    dest.writeDouble(voteAverage); 
    dest.writeInt(voteCount); 
} 


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

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

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

    @Override 
    public Movie createFromParcel(Parcel source, ClassLoader loader) { 
     return null; 
    } 
}; 
} 

我填充这些对象的RecyclerView。当我点击一个RecyclerView项目时,我想通过意图将该对象传递给另一个活动。但是我不断收到一个空指针。

这是我onClick,我的parcelable添加到意图

@Override 
public void onClick(View v) { 

    Log.i("POSITION: ", String.valueOf(getAdapterPosition())); 
    Movie movie = mMovieList.get(getAdapterPosition()); 
    Intent detail = new Intent(mContext, MovieDetailActivity.class); 
    //Bundle bundle = new Bundle(); 
    //bundle.putParcelable("movie_object", movie); 
    detail.putExtra("movie_object", movie); 
    // detail.putExtras(bundle); 
    mContext.startActivity(detail); 
} 

注释行是我的尝试。

在这里,在MovieDetailActivity是我试图访问对象:

Intent i = getIntent(); 
Movie movie = i.getParcelableExtra("movie_object"); <--Null 

我已经实现序列化和工作正常,但是,我现在想用这需要parcelable的onSavedInstanceState方法。

我不知道什么是错的。任何人都可以看到错误?

+0

@ user3676184我不跟随?这是我需要的一个对象变量,所以我添加了它...你认为这可能导致问题吗? –

+0

我这么认为,但我不知道 – Pavya

回答

0

试试这个:第一个活动传递mMovieList直接通过意向:

Intent detail = new Intent(mContext, MovieDetailActivity.class); 
intent.putParcelableArrayListExtra("movie_object", mMovieList); 
mContext.startActivity(detail); 

而在第二个活动得到电影排行榜

List<Movie> mMovieList = new ArrayList<Movie>; 
Bundle bundle = getIntent().getExtras(); 
mMovieList = bundle.getParcelableArrayList("movie_object"); 

从列表让你的电影对象

要不试试这个链接https://stackoverflow.com/a/10114932/5202007

0

您可以将您的模型或mMovieL北京时间这里

Intent detail = new Intent(mContext, MovieDetailActivity.class); 
intent.putParcelableArrayListExtra("movie_object", mMovieList); 
startActivity(detail); 

,并在另一个活动,你可以把它像这样

Bundle bundle = getIntent().getExtras(); 
ArrayList<mMovieList> mList=bundle.getParcelableArrayList("movie_object"); 
相关问题