2012-02-14 45 views
0

我正在使用AsyncTask下載圖像,並希望將下載的圖像發送到UI線程。這是它的代碼。如何使用AsyncTask將圖像從後臺線程發送到UI線程?

public class DownloadImageTask extends AsyncTask<URL, Void, Drawable>{ 

    @Override 
    protected Drawable doInBackground(URL... imgURL) { 
     // TODO Auto-generated method stub 
     InputStream in; 
     Bitmap bitmap; 
     Drawable d; 
     try { 
      //in = (InputStream) imgURL[0].getContent(); 
      bitmap = BitmapFactory.decodeStream(imgURL[0].openConnection().getInputStream()); 
      d =(Drawable)new BitmapDrawable(bitmap); 
      return d; 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return null; 
     }  
    } 
} 

謝謝。

回答

2

doInBackround()執行後返回的值將被傳遞到onPostExecute()AsynkTask,所以你應該重寫onPostExecute()方法,在那裏你會收到你的Drawable。請注意,onPostExecute()onPreExecute()在UI線程上運行,因此您可以從這兩種方法修改/更新UI。

0

類DownloadTask擴展的AsyncTask {

@Override 
    protected Boolean doInBackground(Url... url) { 
     Bitmap b = 
          // do some bitmap downloader code from web url 

     return b; 
    } 

    @Override 
    protected void onPostExecute(Bitmap image) { 

     imageView.setImageBitmap(image); 

    } 
} 

赤出這個代碼,因爲你無法從doInBackGround()設置圖像....

但還是如果u要設置有2種方式。

  1. 使用OnProgressUpdate()在此線程方法或
  2. 試方法Activity.runOnUiThread(){}救援人員到場」,其將與UI線程交互