这个问题在我的手机上没有发生,因为它有2 GB的内存,但有很多手机有1 GB的内存,这种问题几乎每次都发生在这样的手机上。每次从图库加载并放置在imageview上的图像都会因为内存错误而崩溃。
这是我的代码。我得到图像的宽度高度然后缩放图像但仍然无法工作。我也使用毕加索,因为它是异步工作的。
public static void setGalleryImageWithPicasso(Activity context, Uri imageURI, int image, final PicassoBitmapCallBack callBack) {
int MAX_WIDTH =500;
int MAX_HEIGHT =500;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
String filePath = getPath(imageURI, context);
BitmapFactory.decodeFile(filePath, options);
int width = options.outWidth;
int height = options.outHeight;
while (width > MAX_WIDTH && height > MAX_HEIGHT) {
width = (width * 2) / 3;
height = (height * 2) / 3;
}
Picasso.with(context)
.load(imageURI)
.resize(width, height)
.centerInside()
.placeholder(image)
.error(image)
.into(new Target() {
@Override
public void onBitmapLoaded (Bitmap bmp, Picasso.LoadedFrom from){
// Place image on imageview etc
callBack.onSuccess(bmp);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
public static String getPath(Uri uri, Activity activity) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = activity.getContentResolver().query(uri, projection, null, null, null);
int column_index = 0;
if (cursor != null) {
column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
}
int columnIndex = 0;
if (cursor != null) {
columnIndex = cursor.getColumnIndex(projection[0]);
}
String filePath = null;
if (cursor != null) {
filePath = cursor.getString(columnIndex);
cursor.close();
}
return filePath;
}
我查看了样本大小并检查了很多但是无法理解它,所以PLZ可以有人发布我的代码修改而不给我链接。我不明白500 * 500相当小,但我仍然得到同样的错误。