84 votes

Comment passer plusieurs paramètres primitifs à une AsyncTask ?

D'autres questions connexes se posent, telles que Comment passer 2 paramètres à une classe AsyncTask ? mais je me suis heurté à la difficulté d'essayer en vain de passer plusieurs primitives en tant que paramètres à une AsyncTask, et je souhaite donc partager ce que j'ai découvert. Cette subtilité n'est pas prise en compte dans les questions et réponses existantes, et je veux donc aider ceux qui rencontrent le même problème que moi et leur épargner de la peine.

La question est la suivante : J'ai plusieurs primitif paramètres (par exemple deux longs) que je veux passer à une AsyncTask pour qu'elle soit exécutée en arrière-plan - comment cela peut-il être fait ? (Ma réponse... après avoir lutté avec cela pendant un certain temps... peut être trouvée ci-dessous).

1voto

tschundeee Points 9241

Ce problème est résolu par la sous-classification. Google propose un exemple de résolution de ce problème (sous-classement) dans la documentation officielle Android AsyncTask :

http://developer.Android.com/reference/Android/os/AsyncTask.html

Exemple :

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {
        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls[i]);
            publishProgress((int) ((i / (float) count) * 100));
                 // Escape early if cancel() is called
            if (isCancelled()) break;
        }
        return totalSize;
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X