如何使用AsyncTask将图像从后台线程发送到UI线程?

时间:2012-02-14 09:38:16

标签: android android-asynctask

我正在使用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 个答案:

答案 0 :(得分:2)

执行doInBackround()后,返回的值将传递到onPostExecute()中的AsynkTask,因此您应该覆盖onPostExecute()方法,然后您将收到{ {1}}。请注意,DrawableonPostExecute()在UI线程上运行,因此您可以使用这2种方法修改/更新UI。

答案 1 :(得分: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); 

    }
} 

删除此代码,因为U无法从doInBackGround()....

设置图像

但是如果你想设置它有两种方法。

  1. 在此主题或
  2. 上使用OnProgressUpdate()方法
  3. 尝试方法Activity.runOnUiThread(){} thro'它将与UI线程交互