web-dev-qa-db-fra.com

Volley et AsyncTask

J'ai lu un article sur Volley et je sais que c'est une excellente bibliothèque de réseautage. Mais je ne pouvais pas comprendre une chose. 

Toutes les demandes sont-elles async ou non? 

Lorsque je veux envoyer une demande asyncTask en utilisant Volley, dois-je placer la demande Volley en AsyncTask? 

 private class MyClass extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
           // do Volley request
        }
}

Est-ce la bonne approche? 

40
pmb

Vous n'avez pas besoin d'exécuter la demande Volley sur AsyncTask.

Pourquoi:

Ils gèrent toutes les tâches liées au réseau sur des threads séparés . Si vous examinez de près le projet de bibliothèque, ils ne décrivent pas l'AsyncTâche . Mais ils gèrent intelligemment toutes les tâches liées au réseau.

Vérifiez RequestQueue.Java class dans le package principal de Volley

ici je colle Java doc.

/**
 * A request dispatch queue with a thread pool of dispatchers.
 *
 * Calling {@link #add(Request)} will enqueue the given Request for dispatch,
 * resolving from either cache or network on a worker thread, and then delivering
 * a parsed response on the main thread.
 */

Édité:

Formant une demande :

Avec Volley, la communication réseau est gérée par RequestQueue. Le meilleur moyen d'utiliser RequestQueue et tous ses outils, en particulier le cache, consiste à l'instancier une fois et à le conserver en tant que singleton. À ce stade, vous pouvez ensuite ajouter ou annuler des demandes, arrêter ou démarrer des demandes et accéder au (x) cache (s) de réponse. 

RequestQueue queue =Volley.newRequestQueue(this);

Une fois que la RequestQueue a été instanciée, une demande doit être formée. Cela peut être fait en utilisant quelques classes de requêtes «prêtes à l'emploi» incluses dans la bibliothèque Volley ou en étendant la classe de requêtes Volley dans votre propre requête personnalisée. Les classes de demande déjà incluses dans Volley sont une demande de chaîne, des demandes JSON et une demande d'image. La plupart des classes de requêtes incluses dans la bibliothèque Volley utilisent des constructeurs similaires à ceux décrits ci-dessous.

Paramètres passés au constructeur:

RequestMethod (get, post, delete, ect) JSONObject - Un objet facultatif qui sera publié avec votre demande ResponseListener - Où vos données iront après la demande is complete ErrorListener - Qu'est-ce qui sera dit en cas de problème avec votre demande?.

JsonObjectRequest request = JsonObjectRequest(Requestmethod, url, null,  new ResponseListener(), new ErrorListener());

Liste des destinataires:

Auditeur à réponse réussie

private class ResponseListener implements Response.Listener{
  @Override
  public void onResponse(JSONObject response){

  }
}

Auditeur de réponse d'erreur

private class ErrorListener implements Response.ErrorListener{
  @Override
  public void onErrorResponse(VolleyError error){

  }
}

Enfin, ajoutez votre demande à la file d’attente, le reste de tout ce que Volley gérera pour vous.

Faire un appel:

Maintenant que nous avons créé nos classes de requête et de réponse, nous sommes prêts à ajouter la requête à la file d'attente et à récupérer les données. Pour ce faire, nous ajoutons simplement la demande à la file d'attente.

queue.add(request);

La réponse ou l'erreur sera alors transmise aux classes de réponse/erreur que nous avons définies dans notre demande. Vous pouvez ajouter autant de demandes que vous le souhaitez à la file d'attente en même temps et les réponses seront remises à leurs classes de réponses/erreurs respectives.

55
Gru

Lorsque vous utilisez Volley, il n’est pas nécessaire de le combiner avec AsyncTask. Il fait le travail de réseau sur un autre fil pour vous.

Ici est un exemple de base d'un appel réseau utilisant Volley. Comme vous pouvez le constater, tout le code se trouve dans la Activity, sans qu'il soit nécessaire de définir une AsyncTask.

6
Toon Borgers

Volley ne peut pas être inséré dans AsyncTask car,

Volley lance lui-même le ou les threads d'arrière-plan, de sorte que toutes les requêtes réseau sont exécutées à partir du thread d'interface utilisateur. Vous n'avez donc plus besoin d'étendre AsyncTask. Bien sûr, vous devrez prendre soin d’annuler les demandes en cours de rotation ou lorsque l’utilisateur quitte votre activité… . En tant que Volley, il est principalement utilisé à des fins de mise en réseau sous Android (pour une utilisation majeure, DownloadManager). Il effectue un travail similaire de la classe AsyncTask. Implémentez Singleton dans Volley. Les images peuvent également être envoyées dans Volley. 

1
Chinmai KH

L’introduction de la bibliothèque Volley a pour but de s’assurer que l’utilisateur n’a pas à s’inquiéter de tout ce qui est "évident" lors de l’envoi d’une requête réseau. Cela signifie que volley s'occupe de ce qui suit

  • Changer de fil de fond 
  • Disque transparent et réponse mémoire
  • Plusieurs connexions réseau simultanées. etc

Pour répondre à votre question- Vous n'avez pas à vous soucier de passer au fil de discussion en arrière-plan, Volley s'en occupe tout seul. De plus, une fois la demande terminée, le rappel de succès ou d'échec est appelé sur le thread principal. Par conséquent, avec le développeur Volley, vous n'avez pas à vous soucier du changement de thread

Ce tutoriel ici donne une bonne explication étape par étape de l’utilisation de Volley Library.

0
IrshadKumail