Ceci est lié à mon précédent post Problem with downloading multiple files using AsyncTaskComment récupérer l'état d'achèvement des tâches dans AsyncTask
Je suis en train de télécharger deux fichiers vidéo et montrent aussi un ProgressDialog au cours du processus. Pour cela, j'utilise AsyncTask. Je veux que le 1er téléchargement se termine, libère de la mémoire puis commence le 2ème téléchargement. J'ai écrit le code suivant pour y parvenir, mais il semble que le deuxième téléchargement ne commence jamais.
startDownload() {
DownloadFileAsync d1 = new DownloadFileAsync();
d1.execute(videoPath+fileNames[0],fileNames[0]);
if(d1.getStatus()==AsyncTask.Status.FINISHED) {
d1 = null;
DownloadFileAsync d2 = new DownloadFileAsync();
d2.execute(videoPath+fileNames[1],fileNames[1]);
}
}
Est-il possible que je puisse retourner l'état d'avancement de ma 1ère tâche & puis démarrer le 2ème?
Voici le code de ma classe DownloadFileAsync:
class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... aurl) {
int count;
try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
File root = android.os.Environment.getExternalStorageDirectory();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(root.getAbsolutePath() + "/videos/" + aurl[1]);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
tv.append("\n\nFile Download Completed!");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
}
}
Mais dans l'application réelle, je dois télécharger plusieurs fichiers, pas seulement 2. Alors, y a-t-il un autre moyen d'y parvenir? – Sourav
J'ai essayé d'y mettre une boucle while while (d1.getStatus() == AsyncTask.Status.RUNNING) {...} mais l'application entière s'est bloquée. Donc, je me demandais s'il y avait une meilleure façon de le faire. – Sourav
J'ai gardé le code pour le 2ème téléchargement dans la méthode onPostExecute(). Mais la 2ème tâche a continué à s'exécuter pour un nombre infini de fois. S'il vous plaît montrez-moi comment implémenter cette logique pour 5 tâches continues (téléchargements) – Sourav