gpt4 book ai didi

java - 多个下载异步

转载 作者:太空狗 更新时间:2023-10-29 16:43:15 24 4
gpt4 key购买 nike

在 java 中,我想一次为我的 imageview 下载多个图像。我发现这段代码确实做到了这一点,但它只下载了第一张图片。我认为这与doInBackground中的第一行有关。我如何调整此代码,使其循环 imageView 并下载 imageView 的每个图像。

package com.denederlandsewateren.daos;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;

public class DownloadImageTaskDAO extends AsyncTask<ImageView, Void, Bitmap> {

ImageView imageView = null;

@Override
protected Bitmap doInBackground(ImageView... imageViews) {
this.imageView = imageViews[0];
return download_Image((String)imageView.getTag());
}

@Override
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}

private Bitmap download_Image(String url) {
//---------------------------------------------------
Bitmap bm = null;
try {
URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch (IOException e) {
Log.e("Hub","Error getting the image from server : " + e.getMessage().toString());
}
return bm;
//---------------------------------------------------
}

}

从这里调用:

public void setImages(String url1, String url2) {
image1.setTag(url1);
image2.setTag(url2);
DownloadImageTaskDAO imageDAO = new DownloadImageTaskDAO();
imageDAO.execute(image1, image2);
}

最佳答案

@Override
protected Bitmap doInBackground(ImageView... imageViews) {
this.imageView = imageViews[0];
return download_Image((String)imageView.getTag());
}

您只处理发送到 AsyncTask 的第一个参数。使用参数 ImageView... 您可以发送一个、两个、N 个元素或数组。遍历参数并处理每个参数。

您可以在 onPostExecute 中使用 doInBackground 的返回值,我个人会尽可能多地利用它来实现 encapsulation .

总体而言,我建议您阅读 AsyncTask引用 Android 开发者以更好地理解 AsyncTasks。

我确实重写了您的代码,下面的代码理论上应该可以工作(未经测试)。

public class DownloadImageTaskDAO extends AsyncTask<ImageView, Void, ArrayList<DownloadImageTaskDAO.Container>> {

@Override
protected ArrayList<Container> doInBackground(ImageView... imageViews) {
ArrayList<Container> results = new ArrayList<Container>(imageViews.length);

for (ImageView imageView : imageViews) {
Container tmp = new Container();
tmp.holder = imageView;
tmp.image = download_Image(imageView.getTag().toString());
results.add(tmp);
}

return results;
}

@Override
protected void onPostExecute(ArrayList<Container> result) {
for (Container container : result) {
container.holder.setImageBitmap(container.image);
}
}

private Bitmap download_Image(String url) {
....
}

class Container {
ImageView holder;
Bitmap image;
}
}

关于java - 多个下载异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com