android反序列化对象?

时间:2011-05-03 06:52:47

标签: android android-intent

如何反序列化此类型:

public Intent putExtra(String name, Serializable value)

示例:

 intent.putExtra("activityToPass", GoToThisActivity.class);
 ???
 getIntent().getExtras.getSerializable("activityToPass");

请如何做到这一点;

请帮助!!

1 个答案:

答案 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}

成员。
你需要单独施放它们。