web-dev-qa-db-de.com

Volley und AsyncTask

Ich habe einen Beitrag über Volley gelesen und weiß, dass es eine großartige Netzwerkbibliothek ist. Aber ich konnte nichts verstehen. 

Alle Anforderungen sind Async-Aufgabe oder nicht? 

Wenn ich eine asyncTask-Anfrage mit Volley senden möchte, muss ich die Volley-Anfrage in AsyncTask? Einfügen. Oder sollte ich einfach Volley Request anrufen, wenn es bereits eine AsyncTask-Anfrage ist? 

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

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

Ist das der richtige Ansatz? 

40
pmb

Sie müssen keine Volley-Anfrage für AsyncTask ausführen.

Warum:

Sie verwalten alle netzwerkbezogenen Aufgaben in einem separaten Thread ..__ Wenn Sie das Bibliotheksprojekt genau betrachten, haben sie sich die AsyncTask nicht vorgestellt. Sie erledigen jedoch alle netzwerkbezogenen Aufgaben auf intelligente Weise.

Überprüfen Sie RequestQueue.Java class im Hauptpaket von Volley

hier füge ich Java doc ein.

/**
 * 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.
 */

Bearbeitet:

Anfrage erstellen :

Mit Volley wird die Netzwerkkommunikation von RequestQueue verwaltet. Die Anwendung von RequestQueue und aller seiner Werkzeuge, insbesondere des Caches, lässt sich am besten durch einmaliges Instanziieren und Einzelnhalten erreichen. An dieser Stelle können Sie Anforderungen hinzufügen oder abbrechen, Anforderungen stoppen oder starten und auf den Antwort-Cache (s) zugreifen. 

RequestQueue queue =Volley.newRequestQueue(this);

Nachdem die RequestQueue instanziiert wurde, muss eine Anfrage gebildet werden. Dies kann durch die Verwendung einiger verschiedener "out of the box" -Anforderungsklassen, die in der Volley Library enthalten sind, oder durch die Erweiterung der Volley-Anforderungsklasse in Ihre eigene benutzerdefinierte Anforderung durchgeführt werden. Die bereits in Volley enthaltenen Anforderungsklassen sind eine String-Anforderung, JSON-Anforderungen und eine Image-Anforderung. Die meisten der in der Volley-Bibliothek enthaltenen Anforderungsklassen verwenden Konstruktoren ähnlich wie die unten stehenden.

Parameter, die an den Konstruktor übergeben werden:

RequestMethod (Abrufen, Posten, Löschen, ect) JSONObject - Ein optionales Objekt, das mit Ihrer Anfrage gepostet wird ResponseListener - Hier werden Ihre Daten nach der Anfrage gespeichert is complete ErrorListener - Was wird gesagt, wenn ein Problem mit Ihrer Anfrage aufgetreten ist.

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

Listner erhalten eine Antwort:

Erfolgreicher Antwort-Listener

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

  }
}

Error Response Listener

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

  }
}

Fügen Sie schließlich Ihre Anfrage in die Anforderungswarteschlange ein. Alles, was Volley für Sie erledigen wird.

Anruf tätigen:

Nun, da wir unsere Anfrage- und Antwortklassen erstellt haben, können wir die Anfrage zur Warteschlange hinzufügen und die Daten abrufen. Dazu fügen wir die Anfrage einfach zur Warteschlange hinzu.

queue.add(request);

Die Antwort oder der Fehler wird dann an die Antwort-/Fehlerklassen übermittelt, die wir in unserer Anfrage definiert haben. Sie können der Warteschlange beliebig viele Anforderungen hinzufügen, und die Antworten werden an die jeweiligen Antwort-/Fehlerklassen übermittelt

55
Gru

Wenn Sie Volley verwenden, müssen Sie es nicht mit AsyncTask kombinieren. Es erledigt die Vernetzung in einem anderen Thread für Sie.

Hier ist ein grundlegendes Beispiel für einen Netzwerkanruf mit Volley. Wie Sie sehen, befindet sich der gesamte Code nur in der Activity, ohne dass eine AsyncTask definiert werden muss.

6
Toon Borgers

Volley kann nicht in AsyncTask eingefügt werden, weil

Volley initiiert Hintergrundthread (s) eigenständig, sodass alle Netzwerkanforderungen vom UI-Thread ausgeführt werden, sodass Sie AsyncTask in erster Linie nicht mehr erweitern müssen. Natürlich müssen Sie darauf achten, die laufenden Anforderungen bei Rotation abzubrechen oder wenn der Benutzer Ihre Aktivität beendet. Volley wird hauptsächlich für kleinere Netzwerkzwecke in Android (für den DownloadManager) verwendet. Auf ähnliche Weise funktioniert die AsyncTask-Klasse. Implementiere Singleton in Volley. Bilder können auch in Volley gesendet werden. 

1
Chinmai KH

Bei der Einführung der Volley-Bibliothek ging es darum, sicherzustellen, dass sich der Benutzer beim Senden einer Netzwerkanfrage nicht um all das "Offensichtliche" kümmern muss. Dies bedeutet, dass die Volleyball alleine für Folgendes sorgt

  • Hintergrund-Thread wechseln 
  • Transparente Festplatten- und Speicherantwort
  • Mehrere gleichzeitige Netzwerkverbindungen. usw

Um Ihre Frage zu beantworten: Sie müssen sich keine Sorgen machen, dass Sie zum Hintergrund-Thread wechseln möchten. Volley kümmert sich selbst darum. Sobald die Anforderung abgeschlossen ist, wird der Erfolgs- oder Fehlerrückruf im Hauptthread aufgerufen. Wenn Sie mit Volley Entwickler arbeiten, müssen Sie sich nicht um das Wechseln von Threads kümmern

In diesem Tutorial hier wird Schritt für Schritt erklärt, wie Sie mit Volley Library arbeiten

0
IrshadKumail