My app contains listview with 2 textviews and imageview downloaded from json, i have found on internet class for ImageDownload but now when i start app it loads the items, but scrolling is slow and buggy and force closes.Second thing is when i scroll down and turn back on top, images being reloaded again. How could be a problem? I am new to Android
This is in Adapter Class
public View getView(int position, View convertView, ViewGroup parent) {
 ViewHolder holder;
 if (convertView == null) {
 convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
  holder = new ViewHolder();
  holder.headlineView = (TextView)convertView.findViewById(R.id.title);
  holder.reportedDateView = (TextView) convertView.findViewById(R.id.date);
  holder.imageView = (ImageView) convertView.findViewById(R.id.thumbImage);
     convertView.setTag(holder);
    } else {
       holder = (ViewHolder) convertView.getTag();
       }
     FeedItem newsItem = (FeedItem) listData.get(position);
     holder.headlineView.setText(Html.fromHtml(newsItem.getTitle()));
     holder.reportedDateView.setText(Html.fromHtml(newsItem.getContent()));
      if (holder.imageView != null) {
      new ImageDownloaderTask(holder.imageView).execute(newsItem.getAttachmentUrl());
                }
return convertView;
the ImageDownloaderTask class
  public class ImageDownloaderTask extends AsyncTask<String, Void, Bitmap> {
    FeedItem feed;
        private final WeakReference<ImageView> imageViewReference;
        public ImageDownloaderTask(ImageView imageView) {
                imageViewReference = new WeakReference<ImageView>(imageView);
        }
        @Override
        // Actual download method, run in the task thread
        protected Bitmap doInBackground(String... params) {
                // params comes from the execute() call: params[0] is the url.
                return downloadBitmap(params[0]);
        }
        @Override
        // Once the image is downloaded, associates it to the imageView
        protected void onPostExecute(Bitmap bitmap) {
                if (isCancelled()) {
                        bitmap = null;
                }
      if (imageViewReference != null) {
      ImageView imageView = imageViewReference.get();
     if (imageView != null) {
      if (bitmap != null) {
     imageView.setImageBitmap(bitmap);
    } else {
imageView.setImageDrawable(imageView.getContext().getResources().getDrawable(R.drawable.list_placeholder));
                                }
                        }
                }
        }
        static Bitmap downloadBitmap(String url) {
                if(URLUtil.isValidUrl(url)){
             final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
              final HttpGet getRequest = new HttpGet(url);
             try {
            HttpResponse response = client.execute(getRequest);
          final int statusCode = response.getStatusLine().getStatusCode();
              if (statusCode != HttpStatus.SC_OK) {
              Log.w("ImageDownloader", "Error " + statusCode
             + " while retrieving bitmap from " + url);
              return null;
            }
            final HttpEntity entity = response.getEntity();
            if (entity != null) {
            InputStream inputStream = null;
           try {
         inputStream = entity.getContent();
         final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                return bitmap;
              } finally {
               if (inputStream != null) {
              inputStream.close();
            }
          entity.consumeContent();
          }
        }
       } catch (Exception e) {
     // Could provide a more explicit error message for IOException or
     // IllegalStateException
      getRequest.abort();
     Log.w("ImageDownloader", "Error while retrieving bitmap from " + url);
         } finally {
            if (client != null) {
            client.close();
          }
       }
   return null;
   }
return null; }
}
the logCat
threadid=14: thread exiting with uncaught exception (group=0x4182b2a0)
FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:650)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:722)
at com.example.example.asynctaask.ImageDownloaderTask.downloadBitmap(ImageDownloaderTask.java:78)
at com.example.example.asynctaask.ImageDownloaderTask.doInBackground(ImageDownloaderTask.java:35)
at com.example.example.asynctaask.ImageDownloaderTask.doInBackground(ImageDownloaderTask.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
 
     
    