我正在尝试将图像添加到Sqlite DB并将这些图像从DB列出到listview......我存储了获取图像的图像路径。当我在设备中列出从DB中获取的图像时,我会遇到错误:java.lang.OutOfMemoryError:bitmap size exceeds VM budget
我需要清除堆内存吗?如何纠正此问题..这是我的代码。
LView.class
mySQLiteAdapter = new SQLiteAdapter(this);
mySQLiteAdapter.openToWrite();
mAlbum = (ImageView) findViewById(R.id.iv);
mAlbum.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, IMG);
}
});
Button click = (Button) findViewById(R.id.button);
click.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mySQLiteAdapter.insert(str);
System.out.println(str+" Added");
Intent intent = new Intent(LView.this, MyList.class);
startActivity(intent);
}
});`
`
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case 1:
if(resultCode == RESULT_OK) {
Uri selectedUri = data.getData();
str = getPath(selectedUri);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedUri));
mAlbum.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
// Converting image path Uri to String path to store in DB
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cur = managedQuery(uri, projection, null, null, null);
int columnIndex = cur.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cur.moveToFirst();
return cur.getString(columnIndex);
}`
请给我建议... 提前致谢。