当我故意传递此对象时,它没有启动活动。
自定义对象代码
public class UserVo implements Serializable {
String name,id;
String can_reply,can_view;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public String getCan_reply() {
return can_reply;
}
public void setCan_reply(String can_reply) {
this.can_reply = can_reply;
}
public String getCan_view() {
return can_view;
}
public void setCan_view(String can_view) {
this.can_view = can_view;
}
public void setId(String id) {
this.id = id;
}
通过意图发送数据
intent.putExtra("UserVo",vo);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
接收数据
intent=getIntent();
UserVo vo= (UserVo) intent.getSerializableExtra("UserVo");
我也试过捆绑,但它仍然不起作用。
答案 0 :(得分:2)
请看这个链接Serializable:
为每个可序列化类分配一个名为serialVersionUID的版本标识符。默认情况下,此标识符是通过散列类声明及其成员来计算的。此标识符包含在序列化形式中,以便在反序列化期间可以检测到版本冲突。如果本地serialVersionUID与序列化数据中的serialVersionUID不同,则反序列化将因InvalidClassException而失败。
要避免它:
您可以通过声明显式serialVersionUID来避免此失败。声明显式serialVersionUID告诉序列化机制该类向前和向后兼容共享该serialVersionUID的所有版本。声明serialVersionUID如下所示:private static final long serialVersionUID = 0L;
并记住:
如果声明serialVersionUID,则每次类更改与先前版本不兼容时,都应增加它。通常,这是在您添加,更改或删除非瞬态字段时。
为了达到最佳效果,我建议您使用Parcelable
。编码更难,但性能更好。
答案 1 :(得分:1)
如果出于某种原因,您无法将对象设为Parcelable,请尝试添加serialVersionUID。您可以通过IDE生成它或自己选择一个。
答案 2 :(得分:1)
对于UserVo,您将拥有
UserVo implements Parcelable {
...
...
public UserVo (){
}
@Override public int describeContents() {
return 0;
}
@Override public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
+ other data ...writInt etc
}
public void readFromParcel(Parcel source){
name = source.readString();
+ other data ..keep the same order
}
public static final Parcelable.Creator<DocumentFile> CREATOR = new Parcelable.Creator<UserVo>() {
@Override
public UserVo createFromParcel(Parcel source) {
return new UserVo(source);
}
@Override
public UserVo[] newArray(int size) {
return new UserVo[size];
}
};
public UserVo(Parcel source )
{
readFromParcel(source);
}
另外看看注释库,使用@Extra注释很容易发送数据。
答案 3 :(得分:0)
为了将自定义对象从一个Activity发送到Other,您必须使用serialVersionID序列化对象。请根据您的要求尝试以下修改过的代码。
<强> UserVo.java 强>
public class UserVo implements Serializable {
private static final long serialVersionUID = 1L;
String name,id;
String can_reply,can_view;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public String getCan_reply() {
return can_reply;
}
public void setCan_reply(String can_reply) {
this.can_reply = can_reply;
}
public String getCan_view() {
return can_view;
}
public void setCan_view(String can_view) {
this.can_view = can_view;
}
public void setId(String id) {
this.id = id;
}
ActivityA.java - 通过Intent
发送对象Intent objectIntent = new Intent(ActivityA.this, ActivityB.class);
i.putExtra("sendObjects", UserVo ); //Your object here
startActivity(objectIntent);
ActivityB.java - 接收意图
UserVo mReceiveObjects = (UserVo)getIntent().getExtras().get("sendObjects");