2011-08-30 72 views
0

我正在写一个应用程序,该应用程序在SQLite数据库中存储一个字符串,该数据库表示/ sdcard /上图像的文件路径。我有这样的代码在我的活动onCreate()之一: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); 
} 

代码的工作,当我第一次加载的活动,但是当我的屏幕方向之间切换,它崩溃我的应用程序。任何想法,我可以做些什么来解决这个问题?我希望蜜蜂能够继续在方向之间切换,但我不需要每次刷新。

此外,我有点新,所以请尽量让您的答案尽可能不太复杂。

请注意,文件确实存在于所有情况下。

+0

发布您的日志消息。 – dmon

+0

请从logcat发布堆栈跟踪。 – 2011-08-30 16:15:07

回答

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

相关问题