2 votes

Comment la méthode doInBackground() d'AsyncTask sait-elle quand elle doit se terminer ?

J'ai un HttpPostAsyncTask qui étend la classe AsyncTask que j'utilise pour envoyer des données à mon serveur express et obtenir une réponse de celui-ci. Maintenant, bien que la réponse soit renvoyée et que je renvoie la réponse sous la forme d'une chaîne, l'attribut doInBackground() ne se termine pas et donc la méthode AsyncTask est toujours en cours.

Mon doInBackground() ressemble à ceci :

URL url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();

int statusCode = urlConnection.getResponseCode();
switch (statusCode) {
  case 400:
    return "Error 400 - Bad request.";
  case 401:
    return "Error 401 - Unauthorized request.";
}

Maintenant, quand j'enregistre le statusCode je suis en train de le faire correctement. Mais le doInBackground() ne se termine pas, et donc la tâche est toujours en cours.

J'ai fait de nombreuses recherches sur Internet, mais je n'ai pas réussi à trouver ce qui déclenche exactement la doInBackground de la méthode à la fin ? Si cela se termine, je suppose que l'AsyncTask se terminera également, et je pourrai recevoir le résultat dans onPostExecute() méthode.

Edit 1 : J'ai donc une activité A qui appelle startActivityForResult deux fois. D'abord, j'ai un GoogleSignInIntent et j'appelle startActivityForResult pour cela. Si elle renvoie ses résultats correctement, j'appelle startActivityForResult à nouveau (avec un autre requestCode évidemment). Maintenant, j'ai suivi cet article et mis en place un CustomCallback pour toutes les statusCode dans le doInBackground() méthode. Je renvoie également une valeur à la fin de l'opération. doInBackground() .

Ainsi, l'intention GoogleSignIn renvoie correctement les résultats et je lance l'intention suivante, pour laquelle mon serveur renvoie un code de réponse correct et j'appelle le gestionnaire de rappel personnalisé et renvoie une chaîne de caractères à partir de ma page Web. doInBackground() . Pourtant, le onPostExecute() n'est pas appelé.

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