gpt4 book ai didi

android - readParcelable 返回 null

转载 作者:行者123 更新时间:2023-11-29 17:19:10 25 4
gpt4 key购买 nike

我尝试将 News 类传递给 Activity ,因此我实现了 Parcelable 接口(interface)。在 News 中,我也有两个实现 Parcelable 的类,ImageDate

问题是我的 News 对象最后包含字段 imagedatenull

这里是我的代码:

新闻.java

public class News implements Parcelable {
public static final String TAG = "model_news";

private JSONObject object;

private int id;
private String type;
private String title;
private Boolean comment_disabled;
private String category_name;
private String url;
private Image images;
private Date date;
private Boolean is_video;

public News(JSONObject object) {
this.object = object;

try {
id = Integer.parseInt(object.getString("id"));
type = object.getString("type");
title = object.getString("title");
comment_disabled = object.getBoolean("comment_disabled");
category_name = object.getString("category_name");
url = object.getString("url");

if (!object.isNull("images")) {
images = new Image(object.getJSONObject("images"));
}

date = new Date(object.getJSONObject("date"));

is_video = object.getBoolean("is_video");

} catch (JSONException e) {
Log.e(TAG, e.getMessage());
}

}

protected News(Parcel in) {
id = in.readInt();
type = in.readString();
title = in.readString();
category_name = in.readString();
url = in.readString();
images = (Image) in.readParcelable(Image.class.getClassLoader());
date = (Date) in.readParcelable(Date.class.getClassLoader());
is_video = in.readByte() != 0;
comment_disabled = in.readByte() != 0;
}

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

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

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(type);
dest.writeString(title);
dest.writeByte((byte) (comment_disabled ? 1 : 0));
dest.writeString(category_name);
dest.writeString(url);
dest.writeParcelable(images, flags);
dest.writeParcelable(date, flags);
dest.writeByte((byte) (is_video ? 1 : 0));
}

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

Image.java

public class Image implements Parcelable {
public static final String TAG = "model_image";

private JSONObject imageObj;
private JSONObject original;

private String source;
private int width;
private Drawable image;

public Image(JSONObject imageObj) {
this.imageObj = imageObj;

try {
original = this.imageObj.getJSONObject("original");
source = original.getString("src");
width = original.getInt("width");
} catch (JSONException e) {
e.getMessage();
}
}

protected Image(Parcel in) {
source = in.readString();
width = in.readInt();
}

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

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

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

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(source);
dest.writeInt(width);
}

我做错了什么?

最佳答案

Parcelable 实现有错误。

首先,parcelable 实现指出:在 News(Parcel in) 构造函数中传递的字段应该在 writeToParcel() 方法中以相同的顺序写入。这就是所谓的编码和解码。

更正:

  1. Drawable 不能在 Parcelable 中传递参数。

  2. 新闻 Parcelable 实现。

遗漏了一些字段,仅供您理解。

public class News implements Parcelable {

public static final String TAG = "model_news";

private JSONObject object;

private int id;
private String type;
private String title;
private Boolean comment_disabled;
private String category_name;
private String url;
private Image images;
private Date date;
private Boolean is_video;

protected News(Parcel in) {
id = in.readInt();
type = in.readString();
title = in.readString();
category_name = in.readString();
url = in.readString();
}

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

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

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

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(type);
dest.writeString(title);
dest.writeString(category_name);
dest.writeString(url);
}
}






public class Image implements Parcelable {
public static final String TAG = "model_image";

private JSONObject imageObj;
private JSONObject original;

private String source;
private int width;
private Drawable image;

protected Image(Parcel in) {
source = in.readString();
width = in.readInt();
}

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

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

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

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(source);
dest.writeInt(width);
}
}

关于android - readParcelable 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37303393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com