我有一个Java Bean类,在某些字段上用@Parcel(Parcel.Serialization.BEAN)
和Gson' @SerializedName
注释:
Question.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
上,我得到" extra_question"来自我的intent
对象:
Question question = Parcels.unwrap(intent.getParcelableExtra(Constants.EXTRA_QUESTION));
但是Parceler只返回标题和描述(字符串)......所有其他字段都是 null 。
使用Parcels.wrap(question)
包装对象并在调试器上使用Parcels.unwrap(question)
展开它可以完美地工作,但在通过意图后,它似乎失去了"它的价值观,但我无法找到问题......
我的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'
}
答案 0 :(得分:2)
使用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
与非私有字段配对。此技术不需要任何特定的getter和setter组合。