Java 通过parcelableextra通过intent检索时为空对象
在构建初始网格布局等并调用api后,构建一个调用api并检索数据以显示流行电影的MoviesDB应用程序我构建了另一个活动以显示单击的项目。我只想在编码活动之前记录一些数据,但它返回null。这是一个自定义的电影对象。我读了一些关于电影中包裹的排序的文章,但我不确定 请帮忙(如果你能详细说明,那就太好了)Java 通过parcelableextra通过intent检索时为空对象,java,android,parcelable,Java,Android,Parcelable,在构建初始网格布局等并调用api后,构建一个调用api并检索数据以显示流行电影的MoviesDB应用程序我构建了另一个活动以显示单击的项目。我只想在编码活动之前记录一些数据,但它返回null。这是一个自定义的电影对象。我读了一些关于电影中包裹的排序的文章,但我不确定 请帮忙(如果你能详细说明,那就太好了) 公共类MovieAdapter扩展了RecyclerView.Adapter{ 私人语境; 私人编剧电影编剧; 公共电影适配器(上下文上下文,ArrayList电影ArrayList){ t
公共类MovieAdapter扩展了RecyclerView.Adapter{
私人语境;
私人编剧电影编剧;
公共电影适配器(上下文上下文,ArrayList电影ArrayList){
this.context=上下文;
this.movieArrayList=movieArrayList;
}
@非空
@凌驾
public MovieViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.movie\u list\u项,parent,false);
返回新的MoviewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(@NonNull MovieViewHolder,int位置){
holder.movieTitle.setText(movieArrayList.get(position.getoriginalttle());
holder.rate.setText(Double.toString(movieArrayList.get(position.getVoteAverage());
字符串imagePath=”https://image.tmdb.org/t/p/w500“+movieArrayList.get(position.getPosterPath();
带(上下文)滑动
.load(图像路径)
.占位符(R.可绘制.加载)
.进入(电影图像持有者);
}
@凌驾
public int getItemCount(){
返回movieArrayList.size();
}
公共类MoviewHolder扩展了RecyclerView.ViewHolder{
公共文本视图电影,费率;
公众形象观电影形象;
公共电影视图持有者(视图项视图){
超级(项目视图);
movieImage=(ImageView)itemView.findviewbyd(R.id.ivMovie);
rate=(TextView)itemView.findViewById(R.id.tvRating);
movieTitle=(TextView)itemView.findViewById(R.id.tvTitle);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
int position=getAdapterPosition();
如果(位置!=RecyclerView.无位置){
Movie selctedMovie=movieArrayList.get(位置);
意图=新意图(上下文,MovieActivity.class);
intent.putExtra(“电影”,selctedMovie);
背景。开始触觉(意图);
}
}
});
}
}
}
公共类电影实现可包裹
{
@序列化名称(“计票”)
@暴露
私有整数voteCount;
@序列化名称(“id”)
@暴露
私有整数id;
@序列化名称(“视频”)
@暴露
私有布尔视频;
@序列化名称(“投票平均值”)
@暴露
私人双平均;
@序列化名称(“标题”)
@暴露
私有字符串标题;
@序列化名称(“流行”)
@暴露
私人双重流行;
@序列化名称(“海报路径”)
@暴露
私有字符串posterPath;
@SerializedName(“原始语言”)
@暴露
私有字符串源语言;
@序列化名称(“原始标题”)
@暴露
私有字符串源代码;
@SerializedName(“类型标识”)
@暴露
私有列表genreIds=null;
@序列化名称(“背景路径”)
@暴露
私有字符串回传路径;
@序列化名称(“成人”)
@暴露
私人布尔成人;
@序列化名称(“概述”)
@暴露
私有字符串概述;
@序列化名称(“发布日期”)
@暴露
私有字符串释放日期;
公共最终静态包裹。创建者=新创建者(){
@抑制警告({
“未选中”
})
公共电影createFromParcel(包裹中){
返回新电影(中);
}
公共电影[]新阵列(整数大小){
返回(新电影[大小]);
}
}
;
受保护电影(包裹中){
this.voteCount=((整数)in.readValue((Integer.class.getClassLoader());
this.id=((整数)in.readValue((Integer.class.getClassLoader());
this.video=((布尔)in.readValue((Boolean.class.getClassLoader());
this.voteAverage=((Double)in.readValue((Double.class.getClassLoader());
this.title=((String)in.readValue((String.class.getClassLoader());
this.popularity=((Double)in.readValue((Double.class.getClassLoader());
this.posterPath=((String)in.readValue((String.class.getClassLoader());
this.originalLanguage=((String)in.readValue((String.class.getClassLoader());
this.originAltile=((String)in.readValue((String.class.getClassLoader()));
in.readList(this.genreIds,(java.lang.Integer.class.getClassLoader());
this.backdropPath=((字符串)in.readValue((String.class.getClassLoader());
this.成人=((布尔)in.readValue((Boolean.class.getClassLoader());
this.overview=((String)in.readValue((String.class.getClassLoader());
this.releaseDate=((String)in.readValue((String.class.getClassLoader());
}
公共电影(){
}
公共整数getVoteCount(){
返回voteCount;
}
公共void setVoteCount(整数voteCount){
this.voteCount=voteCount;
}
公共整数getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
公共布尔getVideo(){
返回视频;
}
公共视频(布尔视频){
这个视频=视频;
}
公共双getVoteAverage(){
返回平均值;
}
公众的
public class MovieActivity extends AppCompatActivity {
private Movie movie;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie);
// getSupportActionBar().setTitle("Movie");
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Intent intent = getIntent();
if(intent.hasExtra("movie")) {
movie = intent.getParcelableExtra("movie");
Toast.makeText(getApplicationContext(), movie.getOriginalTitle(), Toast.LENGTH_LONG).show();
}
}
}
public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.MovieViewHolder> {
private Context context;
private ArrayList<Movie> movieArrayList;
public MovieAdapter(Context context, ArrayList<Movie> movieArrayList) {
this.context = context;
this.movieArrayList = movieArrayList;
}
@NonNull
@Override
public MovieViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.movie_list_item, parent, false);
return new MovieViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MovieViewHolder holder, int position) {
holder.movieTitle.setText(movieArrayList.get(position).getOriginalTitle());
holder.rate.setText(Double.toString(movieArrayList.get(position).getVoteAverage()));
String imagePath = "https://image.tmdb.org/t/p/w500" + movieArrayList.get(position).getPosterPath();
Glide.with(context)
.load(imagePath)
.placeholder(R.drawable.loading)
.into(holder.movieImage);
}
@Override
public int getItemCount() {
return movieArrayList.size();
}
public class MovieViewHolder extends RecyclerView.ViewHolder {
public TextView movieTitle, rate;
public ImageView movieImage;
public MovieViewHolder(View itemView) {
super(itemView);
movieImage = (ImageView) itemView.findViewById(R.id.ivMovie);
rate = (TextView) itemView.findViewById(R.id.tvRating);
movieTitle = (TextView) itemView.findViewById(R.id.tvTitle);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
Movie selctedMovie = movieArrayList.get(position);
Intent intent = new Intent(context, MovieActivity.class);
intent.putExtra("movie", selctedMovie);
context.startActivity(intent);
}
}
});
}
}
}
public class Movie implements Parcelable
{
@SerializedName("vote_count")
@Expose
private Integer voteCount;
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("video")
@Expose
private Boolean video;
@SerializedName("vote_average")
@Expose
private Double voteAverage;
@SerializedName("title")
@Expose
private String title;
@SerializedName("popularity")
@Expose
private Double popularity;
@SerializedName("poster_path")
@Expose
private String posterPath;
@SerializedName("original_language")
@Expose
private String originalLanguage;
@SerializedName("original_title")
@Expose
private String originalTitle;
@SerializedName("genre_ids")
@Expose
private List<Integer> genreIds = null;
@SerializedName("backdrop_path")
@Expose
private String backdropPath;
@SerializedName("adult")
@Expose
private Boolean adult;
@SerializedName("overview")
@Expose
private String overview;
@SerializedName("release_date")
@Expose
private String releaseDate;
public final static Parcelable.Creator<Movie> CREATOR = new Creator<Movie>() {
@SuppressWarnings({
"unchecked"
})
public Movie createFromParcel(Parcel in) {
return new Movie(in);
}
public Movie[] newArray(int size) {
return (new Movie[size]);
}
}
;
protected Movie(Parcel in) {
this.voteCount = ((Integer) in.readValue((Integer.class.getClassLoader())));
this.id = ((Integer) in.readValue((Integer.class.getClassLoader())));
this.video = ((Boolean) in.readValue((Boolean.class.getClassLoader())));
this.voteAverage = ((Double) in.readValue((Double.class.getClassLoader())));
this.title = ((String) in.readValue((String.class.getClassLoader())));
this.popularity = ((Double) in.readValue((Double.class.getClassLoader())));
this.posterPath = ((String) in.readValue((String.class.getClassLoader())));
this.originalLanguage = ((String) in.readValue((String.class.getClassLoader())));
this.originalTitle = ((String) in.readValue((String.class.getClassLoader())));
in.readList(this.genreIds, (java.lang.Integer.class.getClassLoader()));
this.backdropPath = ((String) in.readValue((String.class.getClassLoader())));
this.adult = ((Boolean) in.readValue((Boolean.class.getClassLoader())));
this.overview = ((String) in.readValue((String.class.getClassLoader())));
this.releaseDate = ((String) in.readValue((String.class.getClassLoader())));
}
public Movie() {
}
public Integer getVoteCount() {
return voteCount;
}
public void setVoteCount(Integer voteCount) {
this.voteCount = voteCount;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Boolean getVideo() {
return video;
}
public void setVideo(Boolean video) {
this.video = video;
}
public Double getVoteAverage() {
return voteAverage;
}
public void setVoteAverage(Double voteAverage) {
this.voteAverage = voteAverage;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Double getPopularity() {
return popularity;
}
public void setPopularity(Double popularity) {
this.popularity = popularity;
}
public String getPosterPath() {
return posterPath;
}
public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
}
public String getOriginalLanguage() {
return originalLanguage;
}
public void setOriginalLanguage(String originalLanguage) {
this.originalLanguage = originalLanguage;
}
public String getOriginalTitle() {
return originalTitle;
}
public void setOriginalTitle(String originalTitle) {
this.originalTitle = originalTitle;
}
public List<Integer> getGenreIds() {
return genreIds;
}
public void setGenreIds(List<Integer> genreIds) {
this.genreIds = genreIds;
}
public String getBackdropPath() {
return backdropPath;
}
public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}
public Boolean getAdult() {
return adult;
}
public void setAdult(Boolean adult) {
this.adult = adult;
}
public String getOverview() {
return overview;
}
public void setOverview(String overview) {
this.overview = overview;
}
public String getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(voteCount);
dest.writeValue(id);
dest.writeValue(video);
dest.writeValue(voteAverage);
dest.writeValue(title);
dest.writeValue(popularity);
dest.writeValue(posterPath);
dest.writeValue(originalLanguage);
dest.writeValue(originalTitle);
dest.writeList(genreIds);
dest.writeValue(backdropPath);
dest.writeValue(adult);
dest.writeValue(overview);
dest.writeValue(releaseDate);
}
public int describeContents() {
return 0;
}
}
public class Movie implements Parcelable {
@SerializedName("vote_count")
@Expose
private Integer voteCount;
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("video")
@Expose
private Boolean video;
@SerializedName("vote_average")
@Expose
private Double voteAverage;
@SerializedName("title")
@Expose
private String title;
@SerializedName("popularity")
@Expose
private Double popularity;
@SerializedName("poster_path")
@Expose
private String posterPath;
@SerializedName("original_language")
@Expose
private String originalLanguage;
@SerializedName("original_title")
@Expose
private String originalTitle;
@SerializedName("genre_ids")
@Expose
private List<Integer> genreIds = null;
@SerializedName("backdrop_path")
@Expose
private String backdropPath;
@SerializedName("adult")
@Expose
private Boolean adult;
@SerializedName("overview")
@Expose
private String overview;
@SerializedName("release_date")
@Expose
private String releaseDate;
protected Movie(Parcel in) {
voteCount = in.readByte() == 0x00 ? null : in.readInt();
id = in.readByte() == 0x00 ? null : in.readInt();
byte videoVal = in.readByte();
video = videoVal == 0x02 ? null : videoVal != 0x00;
voteAverage = in.readByte() == 0x00 ? null : in.readDouble();
title = in.readString();
popularity = in.readByte() == 0x00 ? null : in.readDouble();
posterPath = in.readString();
originalLanguage = in.readString();
originalTitle = in.readString();
if (in.readByte() == 0x01) {
genreIds = new ArrayList<Integer>();
in.readList(genreIds, Integer.class.getClassLoader());
} else {
genreIds = null;
}
backdropPath = in.readString();
byte adultVal = in.readByte();
adult = adultVal == 0x02 ? null : adultVal != 0x00;
overview = in.readString();
releaseDate = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
if (voteCount == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeInt(voteCount);
}
if (id == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeInt(id);
}
if (video == null) {
dest.writeByte((byte) (0x02));
} else {
dest.writeByte((byte) (video ? 0x01 : 0x00));
}
if (voteAverage == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeDouble(voteAverage);
}
dest.writeString(title);
if (popularity == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeDouble(popularity);
}
dest.writeString(posterPath);
dest.writeString(originalLanguage);
dest.writeString(originalTitle);
if (genreIds == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(genreIds);
}
dest.writeString(backdropPath);
if (adult == null) {
dest.writeByte((byte) (0x02));
} else {
dest.writeByte((byte) (adult ? 0x01 : 0x00));
}
dest.writeString(overview);
dest.writeString(releaseDate);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Movie> CREATOR = new Parcelable.Creator<Movie>() {
@Override
public Movie createFromParcel(Parcel in) {
return new Movie(in);
}
@Override
public Movie[] newArray(int size) {
return new Movie[size];
}
};
}