如何反序列化此类型:
public Intent putExtra(String name, Serializable value)
示例:
intent.putExtra("activityToPass", GoToThisActivity.class);
???
getIntent().getExtras.getSerializable("activityToPass");
请如何做到这一点;
请帮助!!
答案 0 :(得分:11)
如果要将自定义对象从一个活动传递到另一个活动,首先必须使用自定义对象的类来实现java.io.Serializable
:
public class SomeObject implements Serializable {
private String name;
public SomeObject (final String name) {
this.name = name;
}
[...]
}
final SomeObject myExtra = new SomeObject("any name");
然后,您可以将此myExtra添加到您调用新Activity
的意图中:
final Intent intent = new Intent(this, GoToThisActivity.class);
intent.putExtra("serializedExtra", myExtra);
startActivity(intent);
在GoToThisActivity
班级onCreate
方法中,您可以将此额外提取为:
final Intent intent = getIntent();
if (intent.hasExtra("serializedExtra"))
final SomeObject myExtra= (SomeObject)intent.
getSerializableExtra("serializedExtra");
[...]
}
现在您的新活动中有自定义对象。
更新1:将课程传递给Intent
的其他活动
如果要将Class
实例传递给intent:
intent.putExtra("classExtra", GoToThisActivity.class);
并在其他活动中反序列化:
if (intent.hasExtra("classExtra"))
{
final Class<?> classExtra= (Class<?>)intent.
getSerializableExtra("classExtra");
[...]
}
更新2:
反序列化自定义对象数组时,必须确保该数组中的元素实现Serializable
接口。
留下你的样本:
public class ButtonPick implements Serializable
{
public static final ButtonPick EDIT = new ButtonPick();
public static final ButtonPick DELETE = new ButtonPick();
}
你把额外的东西放在Intent
:
intent.putExtra("buttonPicks", new ButtonPick[]
{ButtonPick.DELETE,ButtonPick.EDIT});
在其他活动中反序列化它:
if (intent.hasExtra("buttonPicks"))
{
final Object[] buttonPicks= (Object[])intent.
getSerializableExtra("buttonPicks");
[...]
}
您必须将数组转换为Object[]
,无论原始数据是ButtonPicks[]
数组中的元素具有正确的类型,因此内部是
{ButtonPicks.EDIT,ButtonPicks.DELETE}
成员。
你需要单独施放它们。