"使用以 ClassLoader 作为参数的 Parcel.read 方法时-6ren"> "使用以 ClassLoader 作为参数的 Parcel.read 方法时-给定一个自定义类 org.example.app.MyClass implements Parcelable ,我想写一个List到一个包裹。我做了编码 List myclassList = ...-6ren">
gpt4 book ai didi

android - "BadParcelableException: ClassNotFoundException when unmarshalling "使用以 ClassLoader 作为参数的 Parcel.read 方法时

转载 作者:IT王子 更新时间:2023-10-28 23:45:28 24 4
gpt4 key购买 nike

给定一个自定义类 org.example.app.MyClass implements Parcelable ,我想写一个List<MyClass>到一个包裹。我做了编码

 List<MyClass> myclassList = ...
parcel.writeList(myclassList);

每当我尝试用

解码类时
 List<MyClass> myclassList = new ArrayList<MyClass>();
parcel.readList(myclassList, null);

有一个 "BadParcelableException: ClassNotFoundException when unmarshalling org.example.app.MyClass"异常(exception)。

这里有什么问题?为什么找不到类?

最佳答案

当您将 null 作为 ClassLoader 参数时,不要使用框架类加载器解码自定义类(即由您的应用程序提供而不是由 Android 框架提供的类)。使用应用程序类加载器:

parcel.readList(myclassList, getClass().getClassLoader());

每当 Parcel.read*() 方法也有一个 ClassLoader 作为参数(例如 Parcel.readList(List outVal, ClassLoader loader) )并且您想从 Parcel 读取应用程序类时,使用可以通过 getClass().getClassLoader() 检索的应用程序类加载器。

背景: Android 带有两个类加载器:系统类加载器,它能够加载除应用程序提供的系统类之外的所有系统类;和应用程序类加载器,它已将系统类加载器设置为其父类,因此能够加载所有类。如果你给 null 作为类加载器,Parcel.readParcelableCreator() will use the framework class loader ,导致 ClassNotFoundException .

感谢 alexanderblom 提供 the hint这使我走上了正确的道路。

关于android - "BadParcelableException: ClassNotFoundException when unmarshalling <myclass>"使用以 ClassLoader 作为参数的 Parcel.read 方法时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18126249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com