0

hi I am using custom gridView contain imageview and 2 textFields in my program, In getview method i'm am using image fetch from internet using url to show images in imageview. i need to use lrucache to show images without storing the downloaded images in external storage. somebody help me to code this.

Thank You in advance


This is my custom gridview class


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);
    }
}

}

Akshay Kumar S
  • 333
  • 3
  • 12
  • welcome to SO, please show what you have tried in code, what problems you ran into and what you have tried so far. Make sure you add only relevant code. – Esteban Rincon Dec 04 '16 at 17:00

1 Answers1

0

Best way to achieve that feature is using third party libraries. You can give it a try to Picasso, Glide or something else.

Good luck

Emre Aktürk
  • 3,306
  • 2
  • 18
  • 30