I have been trying to implement LruCache in my app but I have difficulties connecting the dots and passing Bitmaps between the different components.
I would like to know how to integrate LruCache in my app. I am also looking to understand the process of implementing the LruCache so the more details the better
The first class is the AsyncTask Image Loader and the second class is my custom adapter
AsyncTask
public class GetImagesBitmap extends AsyncTask<ImageView, Void, Bitmap>{
InputStream inputStream;
ImageView imageView = null;
String path;
@Override
protected Bitmap doInBackground(ImageView... imageViews) {
this.imageView = imageViews[0];
return download_Image((String)imageView.getTag());
}
@Override
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
private Bitmap download_Image(String url) {
final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse httpResponse = client.execute(httpGet);
final int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("ImageDownloader", "Error " + statusCode
+ " while retrieving bitmap from " + url);
return null;
}
final HttpEntity entity = httpResponse.getEntity();
if(entity != null){
inputStream = null;
inputStream = entity.getContent();
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
if(inputStream != null){
inputStream.close();
}
entity.consumeContent();
} catch (IOException e) {
httpGet.abort();
Log.w("ImageDownloader", "Error while retrieving bitmap from " + url);
}finally{
if(client != null){
client.close();
}
}
return null;
}
}
Custom view adapter class
public class CustomListingListAdapter extends ArrayAdapter<HashMap<String, String>> {
private ArrayList<HashMap<String, String>> data;
private Context context;
private LayoutInflater mInflater;
private int viewId;
private String[] tag;
HashMap<String, String> currentData = new HashMap<String, String>();
//private static final String TAG_CONTENT = "content";
//private static final String TAG_RATING = "rating";
private static final String TAG_NAME = "name";
private static final String TAG_IMAGE_PATH = "image_path";
private static final String TAG_PRODUCT_ID = "product_id";
private static final String TAG_RATING = "rating";
public CustomListingListAdapter(Context c,
ArrayList<HashMap<String, String>> data,
int viewId, String[] tag) {
super( c, viewId, data);
this.context = c;
this.data= data;
this.viewId = viewId ;
}
@Override
public int getCount() {
return data.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
Holder holder;
if (convertView == null) {
// Inflate the view since it does not exist
if (vi == null) {
mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = mInflater.inflate(R.layout.list_item_layout, null);
}
holder = new Holder();
holder.Name = (TextView) vi.findViewById(R.id.name);
holder.pid = (TextView) vi.findViewById(R.id.pid);
holder.imageView = (ImageView) vi.findViewById(R.id.list_image);
holder.ratingView = (ImageView) vi.findViewById(R.id.num_stars);
vi.setTag(holder);
}else {
holder = (Holder) vi.getTag();
}
currentData = (HashMap<String, String>) data.get(position);
holder.imageView.setTag(currentData.get(TAG_IMAGE_PATH));
if (currentData != null) {
holder.Name.setText(currentData.get(TAG_NAME));
holder.pid.setText(currentData.get(TAG_PRODUCT_ID));
}
new GetImagesBitmap().execute(holder.imageView);
return vi;
}
private static class Holder {
public ImageView imageView;
public ImageView ratingView;
public TextView pid;
public TextView Name;
}
}