如何从AsyncTask返回位图?

时间:2017-04-14 19:58:21

标签: android bitmap android-asynctask

我想从网上接收位图图像并将其显示在列表视图的包含图像视图的项目上。
但是这似乎在将图像设置为Bitmap Object" bmImage"。时遇到了麻烦 如何复制收到的位图并将其返回?

public class DownloadListImageTask extends AsyncTask<String, Integer, Bitmap> {
    Bitmap bmImage;
    public DownloadListImageTask(Bitmap bmImage){
        this.bmImage = bmImage;
    }
    protected Bitmap doInBackground(String... urls){
        String url = urls[0];
        Bitmap bitmap = null;
        try{
            InputStream in = new URL(url).openStream();
            bitmap = BitmapFactory.decodeStream(in);
        }catch(Exception e){
            e.printStackTrace();
        }
        return bitmap;
    }
    protected void onPostExecute(Bitmap result){
        bmImage = result.copy(result.getConfig(), true);
    }
}

以下是用法

Bitmap bitmap;
new DownloadListImageTask(bitmap).execute(url);
adapter.addItem(bitmap);

1 个答案:

答案 0 :(得分:2)

您在bmImage中创建了位图AsyncTask,但未将其返回到调用Activity的{​​{1}}。

您可以做的一件事是在AsyncTask中创建一个监听器:

AsyncTask

public interface OnBitmapDownloadedListener { void setBitmap(Bitmap bmImage); }

中实施

Activity

将它传递到public class MyActivity extends AppCompatActivity implements DownloadListImageTask.OnBitmapDownloadListener构造函数中,如下所示:

AsyncTask

然后在new DownloadListImageTask(bitmap, this).execute(url) 中,您可以致电

postExecute()