Волейбол и AsyncTask

Я прочитал сообщение о Volley, и я знаю, что это отличная сетевая библиотека. Но я не мог понять ничего.

Весь запрос – это задача Async или нет?

Когда я хочу отправить запрос asyncTask с помощью Volley, мне нужно поставить запрос Volley в AsyncTask? Или я должен просто вызвать Volley Request, это уже запрос AsyncTask?

private class MyClass extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { // do Volley request } } 

Это правильный подход?

Solutions Collecting From Web of "Волейбол и AsyncTask"

Вам не нужно запускать запрос Volly для асинхронной задачи.

Зачем:

Они управляют всей связанной с сетью задачей в отдельном потоке. Если вы внимательно посмотрите на проект библиотеки, они не представляют задачу async. Но они разумно справляются со всей сетевой задачей.

Проверьте класс RequestQueue.java в основном пакете Volly

Здесь я вставляю 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. */ 

Отредактировано:

Формирование запроса :

С Volley сетевая связь управляется RequestQueue. Лучший способ использовать RequestQueue и все его инструменты, особенно кеш, – это создать экземпляр одного экземпляра и сохранить его как одноэлементный. На этом этапе вы можете добавлять или отменить запросы, останавливать или запускать запросы и получать доступ к кешам ответов.

 RequestQueue queue =Volley.newRequestQueue(this); 

После того, как RequestQueue был создан, запрос должен быть сформирован. Это можно сделать, используя несколько разных классов «из коробки», включенных в библиотеку волейбола, или путем расширения класса запросов Volley в ваш собственный пользовательский запрос. Классы запросов, уже включенные в Volley, представляют собой запрос String, запросы JSON и запрос изображения. Большинство классов запросов, включенных в библиотеку Volley, используют конструкторы, подобные тем, которые приведены ниже.

Параметры, передаваемые в конструктор:

RequestMethod (get, post, delete, ect) * JSONObject * – Необязательный объект, который будет отправлен с вашим запросом ResponseListener – Где ваши данные будут отправлены после завершения запроса ErrorListener – Что будет сказано, когда возникла проблема с вашим запросом ,

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

Прослушиватели получат ответ:

Приемник успешного ответа

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

Приемник ответа на ошибку

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

Окончательно добавьте свой запрос в очередь запросов, остальная часть everithing volly будет работать для вас.

Выполнение вызова:

Теперь, когда мы сделали наши классы запросов и ответов, мы готовы добавить запрос в очередь и получить данные. Для этого мы просто добавляем запрос в очередь.

 queue.add(request); 

Затем ответ или ошибка будут переданы классам ответов / ошибок, которые мы определили в нашем запросе. Вы можете добавить столько запросов в очередь, которые вы хотели бы получить за один раз, и ответы будут доставлены в соответствующие классы ответов / ошибок

Когда вы используете Volley, нет необходимости комбинировать его с AsyncTask . Это делает сетевые материалы для другого потока для вас.

Вот базовый пример сетевого вызова с помощью Volley. Как вы можете видеть, весь код находится только в Activity , без необходимости определять AsyncTask .

Волейбол не может быть вставлен внутри AsyncTask, потому что,

Volley инициирует фоновый поток (-ы) самостоятельно, поэтому все сетевые запросы выполняются из потока пользовательского интерфейса, поэтому, прежде всего, вам больше не нужно расширять AsyncTask. Конечно, вам придется позаботиться о том, чтобы отменить текущие запросы при ротации или когда пользователь вышел из вашей деятельности. Поскольку Volley в основном используется для небольших сетевых целей в Android (для основного использования DownloadManager). Он похож на работу класса AsyncTask. Внедрение Singleton в Volley. Изображения можно также отправить в Volley.