在我的Android应用程序中,我有一个AsyncTask从Web下载图片并在UI中显示它(在onPostExecute()中我正在生成一个新的ImageView)。 如何制作同时下载多个图像的AsyncTask,并在下载时直接显示单个图像,即使其他图像尚未就绪?
这是我的代码:
public class DownloadImages extends
AsyncTask<Void, Void, Bitmap> {
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap bitmap = null;
bitmap = downloadBitmap("HERE's MY URL");
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
ImageView image = new ImageView(context);
image.setImageBitmap(result);
((ViewGroup) planLinearLayout).addView(image);
}
}
public Bitmap downloadBitmap(String url) {
final AndroidHttpClient client = AndroidHttpClient
.newInstance("Android");
final HttpGet getRequest = new HttpGet(url);
try {
HttpResponse response = client.execute(getRequest);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("ImageDownloader", "Error " + statusCode
+ " while retrieving bitmap from " + url);
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
inputStream = entity.getContent();
final Bitmap bitmap = BitmapFactory
.decodeStream(inputStream);
return bitmap;
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (Exception e) {
// Could provide a more explicit error message for IOException
// or
// IllegalStateException
getRequest.abort();
Log.w("ImageDownloader", "Error while retrieving bitmap from "
+ url);
} finally {
if (client != null) {
client.close();
}
}
return null;
}
}
答案 0 :(得分:2)
由于您不能同时发出两个请求,您可以选择执行以下操作:
答案 1 :(得分:1)
我建议您使用Universal Image Loader库下载android中的图像。
它下载图像以及做一些更好的事情,比如缓存图像和管理内存非常棘手。
如果您不想缓存图像,则可以使用Universal Image Loader库中的Configuration
禁用此功能。
图书馆链接:https://github.com/nostra13/Android-Universal-Image-Loader
答案 2 :(得分:1)
只需使用onProgressUpdate(Progress...)
即可。将第二个通用类型更改为位图,并在加载完图像后调用publishProgress()
。
答案 3 :(得分:1)
我会推荐Picasso,如果您不希望图像缓存,可以使用skipMemoryCache()
。