Как отправить изображение из фонового потока в поток пользовательского интерфейса, используя AsyncTask? - PullRequest
0 голосов
/ 14 февраля 2012

Я использую AsyncTask для загрузки изображения и хочу отправить загруженное изображение в ветку пользовательского интерфейса.Вот код для этого.

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 ]

2 голосов
/ 14 февраля 2012

После выполнения doInBackround() возвращаемое значение будет передано onPostExecute() в вашем AsynkTask, поэтому вы должны переопределить метод onPostExecute(), и там вы получите Drawable.Обратите внимание, что onPostExecute() и onPreExecute() выполняются в потоке пользовательского интерфейса, поэтому вы можете изменять / обновлять пользовательский интерфейс с помощью этих двух методов.

0 голосов
/ 14 февраля 2012

class 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 () ....

Но все же, если вы хотите установить его, есть2 способа.

  1. использовать метод OnProgressUpdate () в этом потоке или
  2. попробовать метод Activity.runOnUiThread () {} thro ', с которым он будет взаимодействовать с потоком пользовательского интерфейса
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...