我正在尝试从网络接收位图图像并将其显示在包含 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/