gpt4 book ai didi

android - 通过 Intent 传递可序列化对象

转载 作者:行者123 更新时间:2023-11-29 01:49:24 24 4
gpt4 key购买 nike

这是我第一次尝试为我的问题寻求解决方案,所以请尽量做个好人!通过简单的搜索,我在这个网站上找到了许多解决问题的方法,但我猜这次我运气不好。我发现没有什么适合我的问题,所以我结束了一个新问题。

我正在尝试通过 Intent 将对象从一个 Activity 传递到另一个 Activity 。我有一个抽象类和两个子类(其中一个也是抽象的)如下。我需要它们是抽象的。我删除了很多代码(抽象方法等)只是为了找出问题所在,最后我得到了这些非常简单的类,但我仍然遇到同样的问题。

public abstract class MyObject {

private boolean New;
private boolean Modified;

public MyObject() {
New = true;
}

public boolean isNew() {
return New;
}

protected void setNew(boolean value) {
New = value;
}

protected boolean isModified() {
return Modified;
}

protected void setModified(boolean value) {
Modified = value;
}

}

public abstract class MyItemBase extends MyObject {

private Long Id;
private String Description;

public MyItemBase() {
super();
}

public Long getId() {
return Id;
}

public void setId(Long id) {
Id = id;
}

public String getDescription() {
return Description;
}

public void setDescription(String description) {
Description = description;
}

}

public class MyItem extends MyItemBase implements Serializable {

private static final long serialVersionUID = -2875901021692711701L;

public MyItem() {
super();
}

}

我有两个 Activity,ActivityA 带有一个调用 ActivityB 的按钮,如下所示。

public class ActivityA extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);

Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),
ActivityB.class);

MyItem item = new MyItem();
item.setId((long) 1);
item.setDescription("test");

intent.putExtra("MyItem", (Serializable) item);
startActivityForResult(intent, 1);
}

});
}

}

public class ActivityB extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);

MyItem item = (MyItem) getIntent().getSerializableExtra("MyItem");
((TextView) findViewById(R.id.text)).setText(item.getDescription());
}

}

因此,当我从第二个 Activity 收到 MyItem 时,完全没有错误,属性 Id 和 Description 都为空。实际上它是一个新对象,因为 New 属性为真。现在,如果我在将对象放入第一个 Activity 的 Intent 之后尝试准确地获取该对象

intent.putExtra("MyItem", (Serializable) item);
MyItem newItem = (MyItem) intent.getSerializableExtra("MyItem");
startActivityForResult(intent, 1);

它工作正常。 newItem 具有所有具有正确值的属性。

有什么想法吗?

提前谢谢大家!

最佳答案

来自 the official Serializable doc :

Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable.

您的基类没有实现 Serializable,因此它的字段没有被序列化。

制作 MyItemBase(甚至 MyObject)Serializable 并且它的所有后代也将成为 Serializable(没有显式实现接口(interface))。

关于android - 通过 Intent 传递可序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19207602/

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