2011-03-10 18 views
0

我需要加載圖像去ListLayout中的每一行。目前,我有一個ExecutorService基本上執行以下操作:通過HTTP爲列表項加載圖像

pubilc View getView(...) { 
    ... 
    this.executor.execute(new Runnable() { 
     public void run() { 
      // load image over HTTP 
      image.post(new Runnable() { 
       public void run() { 
        image.setImageBitmap(loadedBitmap); 
       } 
      }); 
     } 
    }); 
} 

不幸的是,這真的不工作也很好,我的圖片不斷用錯誤的值重裝,和我的應用程序崩潰試圖滾動時。推薦的方法是什麼?


編輯

我已經更新了我的代碼,用來加載圖像AsyncTask實現(讓這麼多的意義,因此少得多的頭痛),但我應該如何在我的銜接序列我的任務?如果我需要一次只運行一項任務,那沒關係,但我基本上需要一個可以添加並隨意失效的列表。奇怪的是,當我第一次啓動我的應用程序時,圖像加載,但更多的時候,他們最初加載錯誤的地方,然後重新加載幾次,直到一切看起來沒問題。奇怪的。有沒有建議的方式來做到這一點?

回答

1

我認爲這樣做的方法是有一個類來維護一個隊列的圖像URL下載和(可變)數量的AsyncTasks來服務隊列。

類應能:

  • 新的網址添加到隊列中,由AsyncTasks服務變得可用
  • 取消任務,在ListView的滾動拿出來看的URL(你可以從getView()convertView參數)
  • 通過,對於特定URL中的圖像加載回調通知你的ListView,允許它尋找和無效(刷新)該視圖檢測這種
+0

我對整個'AsyncTask' API相當陌生。有沒有關於它們如何工作以及如何使用它們的好教程?目前閱讀http://j.mp/eRty9Z – 2011-03-10 02:07:00

+0

這是最好的地方閱讀。相信我,這比正確使用線程要容易得多! – 2011-03-10 02:11:23

+0

我將如何彙集他們?線程池很容易,但是'AsyncTask'對象有些類似嗎? – 2011-03-10 02:12:28

0

使用下面的方法從互聯網加載圖像。

Resources res; public static Bitmap LoadImage(String URL,BitmapFactory.Options options) { Bitmap bitmap = null;

InputStream in = null; 
    try { 
     in = OpenHttpConnection(URL); 
     // options.inSampleSize = 8; 
     if (in == null) { 
      bitmap = BitmapFactory.decodeResource(TennisAppActivity.mContext.getResources(), 
        R.drawable.profileplaceholder); 
      return bitmap; 
     } else { 
      options.inSampleSize = 5; 
      bitmap = BitmapFactory.decodeStream(in, null, options); 
     } 
     in.close(); 
    } catch (IOException e1) { 
    } 
    return bitmap; 
} 

然後調用看看舔這個

最終BitmapFactory.Options bmOptions; bmOptions = new BitmapFactory.Options(); LoadImage(ImageUrl,bmOptions);

我希望這是幫助。

+0

我已經知道如何加載實際的圖像,它只是以混合的方式異步加載它們。 – 2011-03-10 19:51:48