Подтвердить что ты не робот

Волейбол и AsyncTask

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Почему:

Они управляют всей связанной с сетью задачей в отдельном потоке. Если вы внимательно посмотрите на проект библиотеки, они не отображают задачу 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, или путем расширения класса запросов Volleys в ваш собственный пользовательский запрос. Классы запросов, уже включенные в 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);

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

Ответ 2

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

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

Ответ 3

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

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