0

嗨,我在我的程序中使用包含 imageview 和 2 个 textFields 的自定义 gridView,在 getview 方法中,我正在使用从 Internet 获取的图像,使用 url 在 imageview 中显示图像。我需要使用 lrucache 来显示图像而不将下载的图像存储在外部存储中。有人帮我编写代码。

先感谢您


这是我的自定义 gridview 类


public class CustomGridViewActivity extends ArrayAdapter<Actors> {
private static final String TAG = "CustomGridActivity";
ArrayList<Actors> actorList;
LayoutInflater vi;
int Resource;
ViewHolder holder;

public CustomGridViewActivity(Context context, int resource, ArrayList<Actors> objects) {
    super(context, resource, objects);
    vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Resource = resource;
    actorList = objects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if(v == null){
        holder = new ViewHolder();
        v = vi.inflate(Resource, null);
        holder.iconview = (ImageView) v.findViewById(R.id.IVicon);
        holder.Name = (TextView) v.findViewById(R.id.tvName);
        holder.Price = (TextView) v.findViewById(R.id.tvPrice);
        v.setTag(holder);
    }
    else {
        holder =(ViewHolder) v.getTag();
    }
    holder.iconview.setImageResource(R.mipmap.appcatlog);
    if(actorList.get(position).getUrl().equals("null")) {
        try {
            String base =actorList.get(position).getImagefile();
            String replacechar = "data:image/png;base64,";
            base = base.replace(replacechar,"");
            byte[] imageAsBytes = Base64.decode(base.getBytes(), Base64.DEFAULT);
            holder.iconview.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length));
        }catch (Exception e){
            e.getMessage();
        }
    }else{
        new DownloadImageTask(holder.iconview).execute(actorList.get(position).getUrl());
    }
    holder.Name.setText(actorList.get(position).getName());
    holder.Price.setText(actorList.get(position).getPrice());
    return v;
}

static class ViewHolder {
    public ImageView iconview;
    public TextView Name;
    public TextView Price;
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;
    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            if (urldisplay.contains("https:")||urldisplay.contains("http:")){
                urldisplay = urldisplay.replace("https:","");
                urldisplay = urldisplay.replace("http:","");
            }
            InputStream in = new URL("https:"+urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mIcon11;
    }
    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

}

4

1 回答 1

0

实现该功能的最佳方法是使用第三方库。你可以试试 Picasso、Glide 或其他东西。

祝你好运

于 2016-12-04T16:42:13.743 回答