![](/img/trans.png)
[英]RxAndroid getting Out of memory exception while uploading multiple images
[英]Out Of Memory Exception While Getting AlbumArt
在这里,我创建了可扩展的列表视图,该列表具有Artist的组行,并且在子级中显示了具有专辑封面的Artist的所有专辑。 但是它抛出了内存不足的异常。
这是我获取图像的代码:
public static Bitmap getArtwork(Context context, int album_id) {
ContentResolver res = context.getContentResolver();
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
if (uri != null)
{
InputStream in = null;
try
{
in = res.openInputStream(uri);
return BitmapFactory.decodeStream(in, null, sBitmapOptions);
} catch (FileNotFoundException ex)
{
// The album art thumbnail does not actually exist. Maybe the user deleted it, or
// maybe it never existed to begin with.
} finally
{
if (in != null)
{
try
{
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return null;
}
对于创建子相册列表,我这样做:
private ArrayList<ArrayList<HashMap<String, Object>>> createChildList() {
for (int i = 0; i < songsListData.size(); i++)
{
ArrayList<HashMap<String,Object>> secList = new ArrayList<HashMap<String,Object>>();
String s[] = new String[]{songsListData.get(i).get("artistname")};
String whereClause = MediaStore.Audio.Albums.ARTIST + " = ? ";
Cursor cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,null ,whereClause,s,null);
if (cursor == null)
{
//Query Failed , Handle error.
}
else if (!cursor.moveToFirst())
{
//No media on the device.
}
else
{
int albumName = cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM);
int id = cursor.getColumnIndex(MediaStore.Audio.Albums._ID);
int songcount = cursor.getColumnIndex(MediaStore.Audio.Albums.NUMBER_OF_SONGS);
for(int j=0;j<cursor.getCount();j++)
{
String Name = cursor.getString(albumName);
Integer albumid = cursor.getInt(id);
Bitmap bitmap = null;
bitmap = getArtwork(context, albumid); //calling function
if(bitmap == null)
{
bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.wallpaper);
}
HashMap<String, Object> album = new HashMap<String, Object>();
album.put("albumName",Name);
album.put("albumId", albumid);
album.put("image", bitmap); //storing image
album.put("songcount",cursor.getString(songcount) + " song");
secList.add(album);
cursor.moveToNext();
}
}
cursor.close();
albumData.add(secList);
}
return albumData;
}
我应该怎么处理内存不足异常? 请给我一些解决方案。 谢谢
调试代码并跟踪堆大小是否意外增加(这一定是由于图像大小增加所致),您可以使用Document来了解Android如何计算图像大小
public static Bitmap getResizedBitmap(Bitmap image, int newHeight, int newWidth) {
int width = image.getWidth();
int height = image.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(image, 0, 0, width, height,
matrix, false);
return resizedBitmap;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.