是否可以使用 ArrayList<ModelClass> 作为 android 中的参数执行 AsyncTask?

Is it Possible to execute AsyncTask with ArrayList<ModelClass> as parameter in android?

我正在尝试执行 AsyncTask 以从我的片段 class 中的服务器下载图像,如下所示:

GetImageTask task = new GetImageTask (getActivity());
task.execute(new String[]{ imageUrlList.get(0),  imageUrlList.get(1), imageUrlList.get(2) });

在做背景:

protected List<RowItem> doInBackground(String... urls) {
  rowItems = new ArrayList<RowItem>();
  Bitmap map = null;
  for (String url : urls) {
    map = downloadImage(url);
    rowItems.add(new RowItem(map));
  }
  return rowItems;
}

通过使用此代码,我能够从服务器下载图像,但无法与其他数据信息同步以显示在 Listview 中。

是否可以使用 ArrayList 执行 AsyncTask 后台,或者是否有更好的方法将下载的图像与图像详细信息同步?

正如 Google 在官方文档中所说,您可以将 RowItem 或其他对象类型作为 通用类型 提供给 AsyncTask.

public class GetImageTask extends AsyncTask<RowItem, String, List<RowItem>> 

您的 onDoingBackground 方法如下所示:

protected List<RowItem> doInBackground(RowItem... rowItems) {
  rowItems = new ArrayList<RowItem>();
  Bitmap map = null;
  for (String url : urls) {
    map = downloadImage(url);
    rowItems.add(new RowItem(map));
  }
  return rowItems;
}

这是 AsyncTask 中类型参数的声明

X – The type of the input variables value you want to set to the background process. This can be an array of objects.

Y – The type of the objects you are going to enter in the onProgressUpdate method.

Z – The type of the result from the operations you have done in the background process.

您可以从此处找到有关异步任务的更多信息: https://developer.android.com/reference/android/os/AsyncTask.html

注意:我建议你使用库来进行图像加载操作。因为处理图像下载的操作看起来要复杂得多。 (网络、缓存、内存使用等)

有很多对这项工作有用的库。你可以使用奥托的毕加索 http://square.github.io/picasso/

或其他图书馆:

通用图像加载器: https://github.com/nostra13/Android-Universal-Image-Loader

滑翔: https://github.com/bumptech/glide

壁画: https://github.com/facebook/fresco

祝你好运。

Edit2:你会像这样执行:

myTaskInstance.execute(rowItemsList.toArray(new RowItem[]));