2011-08-30 6 views
0

/sdcard /에있는 이미지의 파일 경로를 나타내는 SQLite 데이터베이스에 String을 저장하는 앱을 작성하고 있습니다. 내가 처음 활동을로드있을 때 코드가 작동BitmapFactory로 인해 오리엔테이션 변경시 앱이 충돌합니다.

final Intent receivedIntent = getIntent(); 

String imageStr = receivedIntent.getExtras().getString("picture"); 
ImageView imageView = (ImageView) findViewById(R.id.pPicture); 
File file = new File (imageStr); 
if (file.exists()) { 
    Bitmap bitmap = BitmapFactory.decodeFile(imageStr); 
    imageView.setImageBitmap(bitmap); 
} 

,하지만 난 화면 방향 전환 할 때, 내 응용 프로그램 충돌 : 내 활동의 onCreate() 하나에서이 코드가 있습니다. 이 문제를 해결하기 위해 내가 할 수있는 것에 대한 아이디어가 있습니까? 오리엔테이션을 계속 전환 할 수 있으면 좋겠지 만 매번 새로 고침 할 필요는 없습니다.

또한 다소 새로운 것이므로 가능하면 답변을 너무 복잡하게 만들지 마십시오.

파일이 모든 경우에 존재한다는 점에 유의하십시오.

+0

로그 메시지를 게시하십시오. – dmon

+0

logcat에서 스택 트레이스를 게시하십시오. –

답변

3

OutOfMemoryException으로 인해 앱이 다운 된 것 같습니다. onDestroy()에서 비트 맵을 다시 읽으십시오.

@Override 
public void onDestroy() { 
    super.onDestroy(); 

    ImageView imageView = (ImageView) findViewById(R.id.pPicture); 
    Drawable drawable = imageView.getDrawable(); 
    imageView.setImageDrawable(null); 

    if (drawable instanceof BitmapDrawable) { 
     Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 
     bitmap.recycle(); 
     bitmap = null; 
    } 
} 
+0

이것은 나를 위해 일했습니다. 고마워요. – jmhend

+0

또한 각 항목에 아이콘이있는 ListView에서 동일한 문제가 발생합니다. 어디에서이 코드를 구현해야합니까? ArrayAdapter 클래스 또는 ListView 클래스에서? – jmhend

+0

여러분을 환영합니다! 대답을 수락하면 좋을 것입니다. 아마 다른 사람을 도울 것입니다. 두 번째 질문에 관해서는 다른 질문으로 추가하는 것이 좋으며 의견을 통해 토론하는 것이 좋습니다. – Michael

관련 문제