2013-02-22 4 views
3

기본적으로 상태 사이에 비트 맵 배열을 저장하려고 해요.ClassCastException 때 parcelable 배열을 unmarshelling

내 조각의 onSaveInstanceState :

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

내가 그래서 배열을 검색 onCreateView 그것의에서이 안드로이드 OS가 일부 메모리 관리를 수행하는 경우를 제외하고, 정기적으로 WORKS

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

은 죽여 내 프로세스는 백그라운드에서 실행, 그리고 나중에 내가 다시에 올 때 복원을 시도 않다면.

는 오류가 내가 얻을 수 있습니다 :

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

내가 제대로 클래스 로더를 설정하지 않는 함께 할 수있는 뭔가라고 생각하지만, 나는 모든 것을 시도하고 작동시킬 수없는 것

답변

2

당신은이 같은 것을 할 수 있습니다. 어디에서 p는 귀하의 소견 목록입니다. 마지막으로 비트 맵 목록을 배열로 다시 변환합니다.

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

나는 그것을 줄 것이다. 내 방법에있어 잘못된 점에 대한 설명이 있습니까? 프로세스가 사망 할 때까지 그것은 잘 작동 –

+0

그래, 응용 프로그램은 더 이상 때문에 예외 충돌하지 않습니다. 이 그래서 대답은 왜 좋은 설명을 가지고 : [링크] (http://stackoverflow.com/questions/8745893/i-dont-get-why-this-classcastexception-occurs?lq=1) @Pragnani의 추천 그래도 큰 비트 맵을 따르는 것이 가장 좋습니다. –

3

안녕 비트 맵을 번들로 넣으면 처리 시간이 더 오래 걸릴 수 있습니다. 그리고 높은 경로를 통과하거나 외부 저장 장치에 이미지를 저장하고 이미지 파일의 절대 경로를 번들 .... SO Bundle Bitmap에서이 문제를 확인하는 것이 좋습니다 .. 메모리를 많이 소모합니다.