Parcelable 遇到ClassNotFoundException 读取一个Serializable 对象
Posted
技术标签:
【中文标题】Parcelable 遇到ClassNotFoundException 读取一个Serializable 对象【英文标题】:Parcelable encounteredClassNotFoundException reading a Serializable object 【发布时间】:2011-06-19 13:11:16 【问题描述】:我已经实现了一个实现 Serializable 对象的类。
public class SaveMe implements Serializable
private static final long serialVersionUID = 1L;
private String someValue1;
private String someValue2;
但每当我尝试在 Bundle 中使用它时,都会出现以下异常:
Parcelable encounteredClassNotFoundException reading a Serializable object
at android.os.Parcel.readSerializable(Parcel.java:1951)
at android.os.Parcel.readValue(Parcel.java:1822)
at android.os.Parcel.readMapInternal(Parcel.java:2008)
at android.os.Bundle.unparcel(Bundle.java:208)
at android.os.Bundle.getString(Bundle.java:1034)
我做错了什么?
编辑
嗯...使用 Parcelable 时的类似问题:
Class not found when unmarshalling
【问题讨论】:
你能显示导致异常的方法调用吗?我也遇到了可序列化的问题...... 其实就是 b.putSerializable("savedinstance", new SaveMe()) 其中 b 是一个 Bundle 对象。然后在 bundle 恢复时隐式调用它。实际上,它是从另一个应用程序恢复的。也许这是个问题? 如果您的其他应用不知道 SaveMe 类,可能会出现这种情况。 【参考方案1】:我相信您可能会遇到类加载器问题。在读取序列化对象之前,您需要在 Bundle 上调用 setClassLoader()。
确保在从包中读取之前调用setClassLoader(SaveMe.class.getClassLoader())
。
如果编译器在编译时找不到 SaveMe,那么请确保目标应用程序中缺少该类,如 Damp 建议的那样。
有关详细信息,请参阅此答案: Parcelable inside bundle which is added to Parcel
【讨论】:
以上是关于Parcelable 遇到ClassNotFoundException 读取一个Serializable 对象的主要内容,如果未能解决你的问题,请参考以下文章
无法解决“Parcelable 遇到写入可序列化对象的 IOException”
Parcelable 在写入可序列化对象时遇到 IOException
获取 Parcelable 遇到 IOException 写入可序列化对象
Parcelable 遇到 IOException 写入可序列化对象 getactivity()