2015-10-31 76 views
0

我试图解析JSON负载并将信息放置在相对布局视图中。Android/Java异步图像下载任务永不停止运行

我用这个标准异步下载程序来获得被放置在适当的ImageView位图:

public class AsyncDownloadImage extends AsyncTask<String,Void,Bitmap>{ 

     ImageView bmImage; 

     public AsyncDownloadImage(ImageView bmImage){ 

       this.bmImage = bmImage; 
     } 


     @Override 
     protected Bitmap doInBackground(String... urls) { 

      String urldisplay = null; 
      urldisplay = urls[0]; 

      Bitmap merchViewBitMap = Bitmap.createBitmap(90,90,Bitmap.Config.ARGB_8888); 


      try{ 

       InputStream in = new URL(urldisplay).openStream(); 
       merchViewBitMap = BitmapFactory.decodeStream(in); 

       in.close(); 

      }catch(Exception e){ 
       System.out.println(String.format("Image Download Exception ==> %s", e.toString())); 

      } 

      return merchViewBitMap; 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 

       super.onPostExecute(result); 
       bmImage.setImageBitmap(result); 

     } 
    } 

这就是所谓的这种方式在适配器类的getView方法:

String imageUrl = String.format("https://www.xxxxxx.com/va/public/render_image?image_id=%s", currentMerchItem.getMt_image_id()); 

new AsyncDownloadImage(viewHolder.imageview).execute(imageUrl); 

下载图像并设置ImageView(s),但是它们被反复无限地下载。多个图像似乎在ImageView中,当滚动浏览时,它们都会变成gif。

如何在列表中最后一张图片下载后停止此操作?

-TU

+0

看起来你没有包括含有该问题的代码。我会说问题是你的'新的AsyncDownloadImage(viewHolder.imageview).execute(imageUrl);'不断被调用。 – wvdz

回答

1

适配器getView方法将被每次称为适配器(列表视图例如)需要刷新项的视图的视图。例如,当你滚动你会得到许多调用getview方法(取决于列表长度的课程)。至少你需要管理你的案例中已经从网上加载哪些图像。对于像你这样的情况,你也有很多开源的代码来进行延迟加载。

您还可以检查此线程,它可以帮助你: Lazy load of images in ListView

+0

所以是的...我只是使用毕加索图书馆。蛋糕。感谢与帖子的提示。 –