gpt4 book ai didi

android - 使用 Parceler 库解包 Parcel 对象时缺少字段

转载 作者:行者123 更新时间:2023-11-29 19:48:16 28 4
gpt4 key购买 nike

我有一个 Java Bean 类,在某些字段上用 @Parcel(Parcel.Serialization.BEAN) 和 Gson 的 @SerializedName 注释:

问题.java:

@Parcel(Parcel.Serialization.BEAN)
public class Question {

private Integer id;
private String title;
private String description;
private User user;

@SerializedName("other_model_id")
private Integer otherModelId,

@SerializedName("created_at")
private Date createdAt;

// ----- Getters and setters -----
}

当我启动 ShowQuestionActivity 时,我将我的 Parceled question 对象传递给它(其中 question 设置了所有字段):

Intent intent = new Intent(context, ShowQuestionActivity.class);
intent.putExtra("extra_question", Parcels.wrap(question));
startActivity(intent);

ShowQuestionActivity 上,我从我的 intent 对象中得到“extra_question”:

Question question = Parcels.unwrap(intent.getParcelableExtra(Constants.EXTRA_QUESTION));

但是 Parceler 只返回标题和描述(字符串)...所有其他字段都是null

在调试器上用 Parcels.wrap(question) 包装对象并用 Parcels.unwrap(question) 解包效果很好,但在通过 intent 传递之后,它似乎“失去”了它的值(value),但我找不到问题......


我的 Parceler 设置如下:

模块build.gradle:

dependencies {
compile 'org.parceler:parceler-api:1.1.4'
apt 'org.parceler:parceler:1.1.4'
}

在我项目的 build.gradle 中:

dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

最佳答案

使用 BEAN 序列化策略,Parceler 需要为您要包装和解包的类中的每个属性匹配 getter 和 setter。

此外,默认情况下未映射的属性(如 Date)要求您编写转换器或使用 @ParcelClass 映射这些类型。参见 http://parceler.org/#custom_serialization

这是一个代码示例:

@Parcel(Parcel.Serialization.BEAN)
public class Question {

private Integer id;
private String title;
private Date createdAt;

// id is included in the Parcelable because it has matching getter and setters
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }

// title is not included as the setter is missing (it's not a true bean property)
public String getTitle() { return title; }

// createdAt will issue an error as it is not a defined type, and no converter is defined.
public Date getCreatedAt() { return createdAt; }
public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; }
}

值得注意的是,如果您对 Gson 编码内部类状态感到满意,您可能需要考虑使用默认的 FIELD 序列化策略而不是 BEAN 与非-私有(private)领域。此技术不需要任何特定的 getter 和 setter 组合。

关于android - 使用 Parceler 库解包 Parcel 对象时缺少字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37397808/

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