今天采用Intent传值,忽然报错“Parcelable encountered IOException writing serializable object”,让我一怔,这不是常规传值方法吗?传的值已经实现了serializable接口,并且传递对象中只定义了两个基本属性,太简单了,竟然还报错,最后用我的华山七十二试解决掉了,这里记录一下
报错点
Intent qri= new Intent();
qri.putExtra("hint", "将二维码放入框内,即可自动扫描");
qri.putExtra("extra", mData);
qri.setClass(getContext(), QRCodePayActivity.class);
qri.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (getOwnerActivity() != null) {
getOwnerActivity().startActivityForResult(qri, requestCode);
}
其中mData的实体是
static class DataBean implements Serializable {
private String sameDepartureNo;
private double amount;
public DataBean(String sameDepartureNo, double amount) {
this.sameDepartureNo = sameDepartureNo;
this.amount = amount;
}
public String getSameDepartureNo() {
return sameDepartureNo;
}
public void setSameDepartureNo(String sameDepartureNo) {
this.sameDepartureNo = sameDepartureNo;
}
}
最终解决
将DataBean实体get、set方法补全即可。
总结
- Intent传值序列化对象时get、set方法要么都有要么全部没有。(容易遗漏)
- 如果一个可序列化的类的成员不是基本类型,也不是String类型,那这个引用类型也必须是可序列化的;否则,会导致此类不能序列化。
更多序列化知识可参考 https://blog.ixin.run/posts/1480596660