解组parcelable数组时ClassCastException

时间:2013-02-22 02:26:45

标签: android fragment parcelable badparcelableexception

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

我的片段是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有关,但我尝试了所有内容并且似乎无法使其工作

2 个答案:

答案 0 :(得分:3)

嗨不建议将Bitmap放在一个需要额外处理时间的捆绑包中。并且消耗大量内存..强烈建议传递路径或将图像保存在外部存储器中,并将绝对路径捆绑到图像文件....在SO Bundle Bitmap中检查此问题。

答案 1 :(得分:2)

您可以执行以下操作。其中p是您的可分配列表。最后将位图列表转换回数组。

List<Parcelable> pList = Arrays.asList(p);
        ArrayList<Bitmap> bList = new ArrayList<Bitmap>();
        for(Parcelable px : pList){
            bList.add((Bitmap)px);
        }