android - 解码 parcelable 数组时出现 ClassCastException

标签 android fragment parcelable badparcelableexception

我基本上是在尝试在状态之间保存一组位图。

我 fragment 的 onSaveInstanceState:

public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArray(SELECTED_IMAGES_ARRAY_BUNDLE, galleryAdapter.getImageBitmaps());
}

在它的 onCreateView 中,我这样检索数组:

savedInstanceState.setClassLoader(Bitmap.class.getClassLoader());
Bitmap[] savedSelectedImages = (Bitmap[]) savedInstanceState.getParcelableArray(SELECTED_IMAGES_ARRAY_BUNDLE);

这会正常工作,除非 Android 操作系统进行一些内存管理,如果它在后台运行则终止我的进程,然后在我返回时尝试恢复它。

这是我得到的错误:

AndroidRuntime(4985): Caused by: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to android.graphics.Bitmap[]

我认为这与没有正确设置 classLoader 有关,但我尝试了所有方法,但似乎无法让它工作

最佳答案

您好,不建议将位图放入一个会花费额外处理时间的包中。并消耗大量内存。强烈建议传递路径或将图像保存在外部存储中,并将绝对路径 bundle 到图像文件....在 SO Bundle Bitmap 中查看此问题.

关于android - 解码 parcelable 数组时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15015848/

相关文章:

android - 在 Room 数据库实体上实现 Parcelable 是一种好习惯吗?

java - Android - 比较方法违反了它的一般契约

java - 在android中使用公历获取当前的儒略日数

android - 将移动应用程序同步到 Android Wear

android - 如何: gridview inside a fragment?

java - 在 Android 中持久化一个 Parcelable 对象

android - TNS运行android无法在genymotion上使用演示项目

android - 为什么我不能在 Android 中扩充我的 Fragments?

java - findviewbyid 错误无法解决

android - 如何通过 bundle 发送对象