使用Picasso下载图像并将图像放入GridView时“内存不足”

时间:2015-02-25 18:08:34

标签: android gridview bitmap picasso

我有一个应用程序可以将某些图像加载到网格视图中。问题是,在加载2或3张图像后,会出现以下错误:

E/dalvikvm-heap﹕ Out of memory on a 7056016-byte allocation.

我已阅读其他与Stackoverflow相关的问题,其中一些解决方案包括在Bitmap上使用.fit()和.resize()来解决此问题。

问题是,我直接从URL下载图像。

你能建议我解决这个OOM问题的方法吗?

干杯!

这是我的GridView适配器代码:

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    List<ParseObject> urlList;
    private LayoutInflater inflater;

public ImageAdapter(Context c, List<ParseObject> urlList) {
    mContext = c;
    this.urlList = urlList;
    inflater = LayoutInflater.from(c);
}
public int getCount() {
    return urlList.size();
}
public Object getItem(int position) {
    return null;
}
public long getItemId(int position) {
    return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View view, ViewGroup parent) {

    View gridItem = view;
    ViewHolder viewHolder;

    if (gridItem == null) {
        viewHolder = new ViewHolder();
        gridItem = inflater.inflate(R.layout.grid_view_item, parent, false);
        viewHolder.squareImageView = (SquareImageView) gridItem.findViewById(R.id.gridItem_squareImageView);
        viewHolder.progressBar = (ProgressBar) gridItem.findViewById(R.id.gridItem_progressBar);
        gridItem.setTag(viewHolder);
    } else {
        viewHolder= (ViewHolder) view.getTag();
    }
   Picasso.with(mContext).load(urlList.get(position).get("thumbnailURL").toString()).into(viewHolder.squareImageView);
    viewHolder.progressBar.setVisibility(View.INVISIBLE);
    return gridItem;
}

class ViewHolder {

    SquareImageView squareImageView;
    ProgressBar progressBar;

    }
} 

1 个答案:

答案 0 :(得分:2)

试试这会占用更少的内存。在加载图像之前,它会调整大小

Picasso.with(mContext).
load(urlList.get(position).get("thumbnailURL").toString())
.resize(100,100)
.into(viewHolder.squareImageView);