2015-10-31 74 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

所以是的...我只是使用畢加索圖書館。蛋糕。感謝與帖子的提示。 –