感謝馬克的幫助。這是在做什麼,他建議的一種方式(以防萬一一些其他好奇):
private class DownloadImageTask extends AsyncTask<Object, Integer, Bitmap> {
private ImageView iv;
protected Bitmap doInBackground(Object... params) {
try {
iv = (ImageView) params[0];
URL aURL = new URL("http://URLTOIMAGE/img" + params[1] + ".png");
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
return bm;
} catch (IOException e) {
return null;
}
}
protected void onPostExecute(Bitmap result) {
iv.setImageBitmap((Bitmap) result);
}
}
而且,它還將可用於如下:
new DownloadImageTask().execute(new Object[] {ImageViewHandle, position});
請注意,這不是一個工作代碼。這是從一個更大的代碼庫中取得的,所以你將不得不作出適當的修改來完成這項工作。
一如既往,感謝您的簡單答案。感謝您將我指向ThumbnailAdapter。我對你原來的AdapterWrapper類不太瞭解,所以在跳進這段代碼之前,我會先通讀一下。出於好奇,如果我使用更新ImageView的AsynTask?線程是否獲得了ImageView的句柄,還是返回了我用來更新的Bitmap? 謝謝 – Legend 2009-10-04 21:34:31
AsyncTask#onPostExecute()在UI線程上運行。它可以傳遞你下載的結果(來自AsyncTask#doInBackground()),它可以更新適當的ImageView。 – CommonsWare 2009-10-04 22:27:28
太棒了!非常感謝您的意見。我現在將實現一個簡單的緩存機制。 (您的縮略圖適配器非常有用!謝謝!)。順便說一句,我剛剛得到了你建議的AsynTask appraoch的工作。我將發佈它作爲對這篇文章的迴應。 – Legend 2009-10-04 22:40:20