简单的测试用例可以100%重现.
尝试在开发人员选项中启用“不要保留活动”.
1-作为活动“ Vector”(或Vector的任何子类)的成员.
2-onSaveInstanceState使用“ putSerializable”将向量成员捆绑在一起
3-转到其他活动(例如,通过按下按钮并打开新活动)
4-在新活动中,按返回按钮完成该活动.
5-确保从onCreate中收到的saveInstanceState捆绑中获取矢量.
6-崩溃!
java.lang.classCastException: java.util.ArrayList cannot be cast to java.util.Vector
我是在做错什么,还是在平台上弄坏了?
解决方法:
通过捆绑包传递时,所有列表都将重建为ArrayList.
在活动之间传输数据时,捆绑中的所有可串行化的数据工具都将被写入字节流,并在新活动中重新创建它们.
当您调用bundle.getSerializable()时,它将使用android.os.Parcel中的readValue()获取值.在Parcel.java的源代码中,当对象是List的子类时,它使用readArrayList()方法创建List,而不管它是上一个活动中的Vector还是其他对象.
public final Object readValue(ClassLoader loader) { int type = readInt(); switch (type) { case VAL_STRING: return readString(); ... case VAL_List: return readArrayList(loader); .... }}
总结 以上是内存溢出为你收集整理的android-当不保持活动状态时,将向量还原为ArrayList onRestoreInstanceState全部内容,希望文章能够帮你解决android-当不保持活动状态时,将向量还原为ArrayList onRestoreInstanceState所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)