使用 Picasso 加载本地图片

Load local images using Picasso

我正在学习使用 Picasso 在 GridView 中加载图像。我试图加载本地可绘制图像,但 gridview 显示空白。我在其他 post 中检查了解决方案,但没有找到任何令人满意的答案。仅找到 this 无效的解决方案。任何加载本地图像的建议将不胜感激。

Adapter to load images

public class ImageAdapter extends BaseAdapter {
    private Context mContext;


    // Keep all Images in array
    public Integer[] mThumbIds = {};


    public ImageAdapter(Context c){
        mContext = c;
    }


 @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {         
        ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
        
        Picasso.with(mContext).load(mThumbIds[position]).into(imageView);
        return imageView;
    }
}
Fragment having gridview

public class GridFrag extends Fragment{

      public Integer[] mThumbIds = { R.drawable.brazil, R.drawable.colosseum,
            R.drawable.eiffeltower, R.drawable.greatwall, R.drawable.pyramid,
            R.drawable.statue, R.drawable.tajmahal };
 
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       
        //Inflate the layout for this fragment
  
  View v = LayoutInflater.from(getActivity()).inflate(R.layout.frag_grid, null);
  
  GridView gridview = (GridView) v.findViewById(R.id.gridview);
       gridview.setAdapter(new ImageAdapter(this.getActivity()));
        
       return v;
    }

}

您应该将数组移动到 ImageAdapter。您的 mThumbIds 数组在适配器中是 空的

使用以下代码更改您的代码:

public class ImageAdapter extends BaseAdapter {
private Context mContext;


// Keep all Images in array
public Integer[] mThumbIds = { R.drawable.brazil, R.drawable.colosseum,
        R.drawable.eiffeltower, R.drawable.greatwall, R.drawable.pyramid,
        R.drawable.statue, R.drawable.tajmahal };


public ImageAdapter(Context c){
    mContext = c;
}


@Override
public int getCount() {
    return mThumbIds.length;
}

@Override
public Object getItem(int position) {
    return mThumbIds[position];
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {         
    ImageView imageView = new ImageView(mContext);
    imageView.setImageResource(mThumbIds[position]);
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setLayoutParams(new GridView.LayoutParams(100, 100));

    Picasso.with(mContext).load(mThumbIds[position]).into(imageView);
    return imageView;
}

}

简单

Uri uri=Uri.fromFile(new File("YOUR IMAGE FILE PATH"));
Picasso.with(mContext).load(uri).placeholder(R.drawable.ic_launcher).error(R.drawable.landscape_1).into("YOUR IMAGE VIEW");

在 picasso 加载实际图像时用于显示示例图像的占位符。

错误:如果图像加载失败,应显示此图像