我在ImageActivity上有一個按鈕ImageView &。當點擊按鈕時,列出可用圖像,當點擊它們中的一個時,它被加載到ImageView中。java OutOfMemoryError:位圖大小超過VM預算
ImageView的XML:
<ImageView
android:id="@+id/imageView"
android:layout_width="300dip"
android:layout_height="300dip"
android:src="@android:drawable/alert_light_frame"
/>
請參閱代碼:
public class ImageActivity extends Activity {
private static final int SELECT_PICTURE = 1;
private String selectedImagePath;
private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.comments_detail);
imageView = (ImageView) findViewById(R.id.imageView);
((Button) findViewById(R.id.BtnBrowse))
.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if (requestCode == SELECT_PICTURE)
{
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
//System.out.println("Image Path : " + selectedImagePath);
imageView.setImageURI(selectedImageUri);
}
}
}
public String getPath(Uri uri)
{
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
問題:的問題是,當我點擊該按鈕會顯示可用的圖像,我選擇其中之一&它加載在ImageView中,當我重複這些步驟幾次應用程序拋出異常時: java.lang.OutOfMemoryError:位圖大小超過VM預算
我戴上它&發現這個問題是由於內存泄漏,但我無法找到我的代碼有什麼問題。任何人都可以花一些他寶貴的時間來幫助我嗎?
謝謝。
你爲什麼需要繼續參考imageView? – bestsss
謝謝@bestsss 我需要將選定的圖像保存到SQLite數據庫 –
,但你有2個圖像在同一時間,有效地加倍所需的內存。解決使用前的圖像,而不是創建... – bestsss