android - 如何从 AsyncTask 返回位图?

标签 android bitmap android-asynctask

我正在尝试从网络接收位图图像并将其显示在包含 ImageView 的 ListView 项目上。
但这似乎在将图像设置为位图对象“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);

最佳答案

您在 AsyncTask 中创建了位图 bmImage,但随后您没有将其返回到调用 AsyncTask< 的 Activity/

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

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

Activity 中实现它

公共(public)类 MyActivity 扩展 AppCompatActivity 实现 DownloadListImageTask.OnBitmapDownloadListener

将其传递到 AsyncTask 构造函数中,如下所示:

new DownloadListImageTask(bitmap, this).execute(url)

然后在postExecute()中你可以调用

bmImage = result.copy(result.getConfig(), true);
listener.setBitmap(bmImage)
// Do stuff with the bitmap in setBitmap()

关于android - 如何从 AsyncTask 返回位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43418409/

相关文章:

Android:使用 DrawableCompat 进行着色

java - 如何使用 libGDX 在纵向和横向模式之间切换?

java - 为 Fragment 中的结果启动 Activity

ubuntu - OpenGL FreeType2 位图不渲染

java - 解码旋转的位图

java - 网址无法转换为字符串

android - 尝试从静态 AsyncTask 方法显示 ProgressDialog 时出现 NullPointerException

android - 在 android 上使用 com.android.camera.action.CROP 裁剪保存的图像

c++ - 在位图图像上绘制图像

android - 一次调用多个 AsyncTask 在 Android 中不起作用