从库加载时无法解决内存不足错误

时间:2016-05-09 05:03:10

标签: android memory

这个问题在我的手机上没有发生,因为它有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相当小,但我仍然得到同样的错误。

0 个答案:

没有答案