2014-02-28 3 views
5

ich .add( neues Netzwerk ruft meine Volley Anforderungswarteschlange, die ich als Singleton erstellt haben, wie vorgeschlagen. Aber ich habe immer sofort .start() diese Netzwerkanrufe. Dies geschieht immer als eine Aktion in einer Aktivität oder einem Fragment.Wie verwende ich die Volley-Netzwerkanforderungswarteschlange?

Die add Methode nicht einmal in ein start Verfahren verkettet wird, wie .add(new volley request).start()

So setzt dies voraus, ich tatsächlich (oder will verwalten) leite irgendwo eine Netzwerk-Warteschlange, außerhalb des Weges Volley seine Warteschlange Griff, ich vermuten. Soll ich diese Dinge an einen IntentService senden und auf den IntentService warten, um eine Antwort auf mein Fragment/meine Aktivität zu senden?

Antwort

7

Als Volley Benutzer kann ich Ihnen sagen, dass ich nie .start() -Methode aufgerufen haben. Alle Anfragen, die ich der Warteschlange hinzugefügt habe, starteten automatisch. Ich habe die Singleton-Klasse wie du verwendet. Du kannst diese tutorial überprüfen, um mehr Informationen zu erhalten (da Google nicht viel zur Verfügung gestellt hat).

+0

interessant, so 'queue' ist' start'. Das erklärt, warum einige meiner Breakpoints zweimal "onResponse" ausgelöst werden. – CQM

+0

Wahrscheinlich, versuchen Sie nicht, die .start() zu verwenden und sehen Sie, ob alles gut geht und hoffen Sie, dass Google eines Tages die vollständige API-Dokumentation bereitstellen wird. Es funktioniert großartig, aber Sie müssen alles untersuchen, selbst :) –

+0

ich bemerkt habe, habe ich praktisch alle Netzwerk Methoden erweitert verwenden 'GSON' und' Oauth2' – CQM

8

Wenn Sie ein requestQueue als erstellen:

requestQueue = Volley.newRequestQueue(mAppContext); 

werden Sie nicht start() brauchen.

Entsprechend der Dokumentation von Volley.RequestQueue: "Erstellt eine Standardinstanz des Worker-Pools und ruft RequestQueue.start() darauf auf."

Daher können Sie sehen, warum Sie nie start() selbst zu nennen benötigt.

Wenn Sie jedoch ein requestQueue als (wie dargestellt in den official reference) erstellen:

RequestQueue mRequestQueue; 

// Instantiate the cache 
Cache cache = new DiskBasedCache(getCacheDir(), 1024 * 1024); // 1MB cap 

// Set up the network to use HttpURLConnection as the HTTP client. 
Network network = new BasicNetwork(new HurlStack()); 

// Instantiate the RequestQueue with the cache and network. 
mRequestQueue = new RequestQueue(cache, network); 

// Start the queue 
mRequestQueue.start(); 

start() müssen genannt werden.

PS: Ich erhalte die Dokumentation als sich im Quellcode zur Verfügung gestellt. IDEs sind in der Lage, sie mühelos zu extrahieren. Ich schwebe einfach über den Namen der Methode/Klasse, deren Dokument ich brauche und drücke STRG (in Android-Studio).