54 votes

Comment exécuter la même asynchronie plus d'une fois ?

Ma tâche asynchrone s'exécute lorsque l'activité démarre, puis si la connectivité réseau n'est pas disponible, j'ai un bouton de rafraîchissement qui essaie d'exécuter la tâche asynchrone pour réessayer. Mais je reçois une erreur de débogage disant ceci

07-29 18:14:21.290: ERROR/AndroidRuntime(9080): FATAL EXCEPTION: main
07-29 18:14:21.290: ERROR/AndroidRuntime(9080): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)
   07-29 18:14:21.290: ERROR/AndroidRuntime(9080):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:541)
   07-29 18:14:21.290: ERROR/AndroidRuntime(9080):     at android.os.AsyncTask.execute(AsyncTask.java:499)
  07-29 18:14:21.290: ERROR/AndroidRuntime(9080):     at com.fttech.gameIT.MainMenu$1.onClick(MainMenu.java:90)

Y a-t-il un moyen de l'exécuter deux fois ?

0voto

Leonardo Points 1

Dans votre MainActivity, vous pouvez mettre ceci :

LeoAsyncTask leoAsyncTaskGeneric;

public void onClick_AsyncTask(View view) {

    LeoAsyncTask leoAsyncTaskInner = new LeoAsyncTask();
    leoAsyncTaskInner.execute();

    leoAsyncTaskGeneric=leoAsyncTaskInner; 

}

/**si vous créez un espace en mémoire de votre classe AsyncTask en tant que générique, alors vous pouvez créer une instance de cette même classe dans la méthode onClick, et là les égaux, donc à chaque fois que vous appuyez sur onClick vous utiliserez une nouvelle instance de la classe AsyncTask, cela ne vous posera pas de problèmes */

0voto

Adrian Trillo Points 11

Vous pourriez annuler votre asyncTask lorsque vous appuyez sur le bouton, puis l'exécuter à nouveau.

Dans la méthode OnClic :

asyncTask.cancel();
AsyncTask asyncTask = new AsyncTask();
asyncTask.execute();

0voto

Justin Imran Points 51

@coder_For_Life22 Je pense que je suis en retard pour la réponse, de toute façon vous pouvez faire comme

    @Override
    protected void onPostExecute(Void a) {

        myAsyncTask=new MyAsyncTask();
    }

afin de démarrer une nouvelle AsyncTask après l'exécution :)

0 votes

Cette méthode est erronée. Je l'ai testée. Elle ne fonctionne pas

0 votes

@MDev , il est difficile de dire ce qui ne va pas, mais avez-vous créé une classe Asynctask ?

0 votes

Oui, mon DownloadTask s'étend AsyncTask . Mais cette méthode ne fonctionne pas. Elle génère la même erreur the task has already been executed . Et actuellement, j'utilise cette méthode stackoverflow.com/a/47763864/16765223 et fonctionne correctement.

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