Java 使用put/getSerializable的Android序列化
我试图在用户旋转android设备时保存类的状态。我想使用putSerializable和getSerializable函数来获取和设置android捆绑包中的类。该类的简化版本如下所示:Java 使用put/getSerializable的Android序列化,java,android,serialization,Java,Android,Serialization,我试图在用户旋转android设备时保存类的状态。我想使用putSerializable和getSerializable函数来获取和设置android捆绑包中的类。该类的简化版本如下所示: public class State implements Serializable { public class Unit implements Serializable { private static final long serialVersionUID = 9107072458243
public class State implements Serializable
{
public class Unit implements Serializable
{
private static final long serialVersionUID = 9107072458243854482L;
private String mName;
private int mCount;
}
private static final long serialVersionUID = 2794811960095192070L;
private ArrayList<Unit> mUnitArray = new ArrayList<Unit>();
}
这有什么理由不起作用吗
提前感谢。您确定要将单元设置为非静态内部类吗?非静态intrnal类始终将外部对象作为隐式成员,并且在包含该数组的对象内部有一个数组似乎很奇怪…可能不是您问题的答案,但是您可以通过添加
android:configChanges=“orientation”来防止活动在循环时重新启动
添加到清单文件中的活动标记。也许你不想要这个,但也许你想要,值得一试:)谢谢@Niek,这真的很有帮助。“我的许多活动都不需要重新启动,因此看起来它应该可以完成任务。@mibollma调用getSerializable不会重新填充arraylist mUnitArray。请使用ANDROID:configChanges并不能解决无法保存状态的问题。这只会让你的问题更加明显。用户几乎肯定会在其他情况下看到问题,例如如果你的应用程序进入后台,其进程在他们返回之前被终止。另外,如果用户插入键盘怎么办?有一种新的输入设备,因此配置发生了变化,现在您的活动被重新启动。或者屏幕大小改变。或区域设置更改。等等,谢谢你。我想在深入研究这个android项目之前,我应该先阅读一下Java。来自C++的,在另一个类中声明的类是相当标准的实践,在上面的例子中声明STD::vector不会是个问题。谢谢你的意见。
myBundle.putSerializable("StateManager", mState);
mState = (State)myBundle.getSerializable("StateManager");