У меня есть список файлов, хранящихся в arraylist, которые мне нужно загрузить в фоновом потоке. Первоначально я думал, что AsyncTask должен быть готов для этой задачи. Но у меня проблема, я не знаю, как передать свой список в метод doInBackground.
Мой массив определен как
private ArrayList<String> FilesToDownload = new ArrayList<String>();
Мой подкласс DownloadFiles (как он написан сейчас) должен вызываться с помощью:
новые DownloadFiles (). execute (url1, url2, url3 и т. д.);
Это не подходит для меня, так как я никогда не знаю, сколько URL у меня будет. Это в значительной степени меняется от случая к случаю. Итак, я хотел бы как-нибудь передать мой массив в метод doInBackground.
Я пытался преобразовать в массив с помощью toArray ():
new DownloadFiles().execute(FilesToDownload.toArray());
Но затмение говорит мне, что execute не применимо для аргумента Object [].
Было предложено привести к URL [], но когда я попытался это сделать, я получил ошибку нелегального приведения и приложение упало.
Кажется, что doInBackground должен быть реализован с параметрами типа varargs (URL ... urls).
Есть идеи, как решить мою проблему? Спасибо.
class DownloadFiles extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
Log.d("Evento", "&&&& downloading: " + FilesToDownload.get(i).toString());
// totalSize += Downloader.downloadFile(urls[i]);
// publishProgress((int) ((i / (float) count) * 100));
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
//setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
//showDialog("Downloaded " + result + " bytes");
}
}