gpt4 book ai didi

android - 如何在 AsyncTask 中加载多个图像

转载 作者:行者123 更新时间:2023-11-29 00:12:09 25 4
gpt4 key购买 nike

我想通过传递一个 url 来加载多个图像。与本教程不同 http://www.learn2crack.com/2014/06/android-load-image-from-internet.html其中只有一张图片被下载并使用 img.setImageBitmap(image) 查看;我的问题是我怎样才能将 url 发送到一个方法来为该 url 加载图像,该方法返回一个图像,然后我在 imageview 中显示它。然后我将其他一些 url 传递给它并获取图像作为响应,然后在其他 ImageView 中显示它。

最佳答案

好吧,假设您出于某种原因想要按顺序一张一张地获取图像,而不是并行地获取图像,并且假设您的 URL 位于列表、数组等中,请修改教程示例,以便 onPostExecute 调用在您的 Activity 中定义方法,在回调接口(interface)中或在您的类本身中定义,每次迭代从列表中选择一个元素,并在前一个完成时启动一个新的 LoadImage 作业。

示例(未经测试)代码:

public class MainActivity extends Activity {
Button load_img;
ImageView img;
Bitmap bitmap;
ProgressDialog pDialog;
private List<String> mURLs = new LinkedList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
load_img = (Button)findViewById(R.id.load);
img = (ImageView)findViewById(R.id.img);
load_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mURLs.add("http://www.learn2crack.com/wp-content/uploads/2014/04/node-cover-720x340.png");
mURLs.add("some-other-URL");

loadNext();
}
});

private void loadNext() {
String url = mURLs.remove();
if (url != null) {
new LoadImage().execute(url);
}
}
}
private class LoadImage extends AsyncTask<String, String, Bitmap> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading Image ....");
pDialog.show();
}
protected Bitmap doInBackground(String... args) {
try {
bitmap = BitmapFactory.decodeStream((InputStream)new URL(args[0]).getContent());
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
protected void onPostExecute(Bitmap image) {
if(image != null){
img.setImageBitmap(image);
pDialog.dismiss();
}else{
pDialog.dismiss();
Toast.makeText(MainActivity.this, "Image Does Not exist or Network Error", Toast.LENGTH_SHORT).show();
}

loadNext();
}
}
}

在此示例中,我将图像重复设置到同一个 ImageView 上,这显然没有意义。您显然必须通过将 ImageView 作为参数发送给任务来跟踪哪个图像进入哪个 ImageView ,或者将 ImageView (或其 R.id.xxx ID 并相应地调用 findById)保存在数组中,或者保持计数器,或者......有一百万种方法可以解决这个问题。

另一种方法是将数组发送到 AsyncTask 并让 doInBackground 使用 for 循环或类似方法简单地遍历数组。

但请注意,更好的方法可能是实际并行执行任务,这样您就可以确保充分利用可用的网络带宽来并行获取图像。

关于android - 如何在 AsyncTask 中加载多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29486952/

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