Статьи

Android Volley Tutorial: опубликовать и скачать изображение

В этом посте я хочу описать, как использовать очень мощную и простую в использовании библиотеку для Android. Эта библиотека называется Volley и может использоваться для управления сетевым соединением. В предыдущем посте мы говорили о HttpUrlConnection и Apache HTTP-клиенте. Они оба действительны и полезны, но используя залп, мы можем упростить нашу работу. Volley — это библиотека, и мы можем скачать ее используя git: git clone

  • https://android.googlesource.com/platform/frameworks/volley

Как только мы получим код, мы можем создать наш проект. Если вы заметили, что загружаемый код предназначен для Android Studio. Если вы хотите переместить его в Eclipse, это очень просто. Не забудьте установить проект в качестве библиотеки.

Зачем использовать залп?

Ну, мы можем спросить, зачем нам использовать другую библиотеку, если у нас уже есть все, что нам нужно для обработки сетевого соединения (например, соединение Http). Что ж, если вы прочитали предыдущие посты, мы заметили, что нам нужно проделать определенную работу: например, нам нужно создать AsyncTask, обработать ошибки сетевого подключения и так далее. Залп все упрощает и повышает производительность приложения. Залп дает нам:

  • Эффективное управление сетью
  • Простое управление запросами
  • Управление диском и кеш-памятью
  • Легко расширять и настраивать под наши нужды

Этих пунктов достаточно, чтобы выбрать Volley в качестве нашей базовой сетевой библиотеки. В этом посте я покажу некоторые основные операции с Volley, а в некоторых других постах я покажу некоторые другие более «сложные» операции.

Залп ядро

Когда мы используем Volley, есть некоторые классы, которые играют важную роль, и, скорее всего, это те классы, которые мы будем использовать чаще. Эти классы:

  • RequestQueue
  • Запрос
  • отклик
  • Некоторый полезный класс, который упрощает нашу работу (пакет инструментов)

RequestQueue — это основной класс библиотеки Volley, он обрабатывает все запросы, которые мы делаем в нашем приложении. Он заботится о очереди запросов и обрабатывает ответы. Обычно мы создаем экземпляр этого класса, вызывая:

1
RequestQueue rq = Volley.newRequestQueue(this);

Эта строка кода просто создает экземпляр RequestQueue с параметрами по умолчанию. Если мы хотим иметь больше контроля, мы можем создать экземпляр этого класса напрямую. Получив экземпляр очереди запросов, мы можем добавить наши запросы. Сетевые запросы являются экземплярами класса Request. Обычно у нас есть все необходимое в пакете инструментов, но мы всегда можем настроить наш запрос, расширяя класс Request и предоставляя нашу логику. Класс ответа — это класс, который мы используем, когда хотим прослушать данные ответа или события ошибок.

Мы увидим это более подробно позже. Если у нас нет особых потребностей, мы можем использовать некоторые классы в пакете инструментов. Эти классы помогают нам обрабатывать общий запрос: например, запрос строки и запрос изображения.

Разместить запрос

Одним из наиболее распространенных запросов, который мы обычно делаем, является запрос POST, когда мы отправляем некоторые параметры на удаленный сервер. В этом сценарии мы можем использовать StringRequest, потому что мы ожидаем отправить строку данных и получить строковый ответ. Итак, мы имеем:

01
02
03
04
05
06
07
08
09
10
11
12
13
RequestQueue rq = Volley.newRequestQueue(this);
StringRequest postReq = new StringRequest(Request.Method.POST, "http://httpbin.org/post", new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        tv.setText(response); // We set the response data in the TextView
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        System.out.println("Error ["+error+"]");
 
    }
}) ;

В строке 1 мы создаем обработчик очереди запросов. В строке 2 мы создаем экземпляр StringRequest. Вы можете заметить, что код кажется слишком сложным, но он очень прост. Первым делом мы указываем, что этот запрос является запросом POST, а затем целевым URL ( http://httpbin.org ). Глядя на код, вы можете заметить, что у нас есть два разных слушателя:

  • Response.Listener
  • Response.ErrorListener

Первый вызывается, когда ответ получен и готов. В этом случае вызывается метод onResponse. Этот метод выполняется в основном потоке, поэтому мы можем обновить, например, некоторые пользовательские интерфейсы. Если что-то идет не так, вызывается ErrorListener.onErrorResponse. В этом методе у нас есть возможность обработать ошибку и сообщить об этом пользователю.

До сих пор мы не отправляли никаких параметров. Если мы хотим опубликовать некоторые данные на удаленном сервере, мы должны переопределить метод getParams. В классе Request getParams — это метод, который возвращает null. Если мы хотим опубликовать некоторые параметры, мы должны вернуть карту с парой ключ-значение. В этом случае мы можем переопределить этот метод:

01
02
03
04
05
06
07
08
09
10
11
12
13
RequestQueue rq = Volley.newRequestQueue(this);
 
StringRequest postReq = new StringRequest(.....)  {
 
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();
 
        params.put("param1", param);
        return params;
    }
 
};

В этом случае мы создаем ключ с именем param1 и передаем значение, сохраненное в параметре param. В конце нам нужно добавить наш запрос в очередь запросов.

1
rq.add(postReq);

Запустив код, мы имеем:

android_volley_post4

Скачать двоичные данные: Изображение

А что если мы хотим скачать двоичные данные? Хорошо, если мы хотим загрузить изображение с удаленного сервера, мы можем использовать ImageRequest. В этом случае имеем:

1
2
3
4
5
6
7
8
ImageRequest ir = new ImageRequest(url, new Response.Listener<Bitmap>() {
 
    @Override
    public void onResponse(Bitmap response) {
        iv.setImageBitmap(response);
 
    }
}, 0, 0, null, null);

Как и прежде, в методе onResponse мы устанавливаем изображение, которое мы получаем от удаленного сервера (строка 4). Мы могли бы установить ширину и высоту изображения и другие параметры. В этом случае мы не реализовали прослушиватель ошибок. В этом случае мы имеем:

android_volley_download_image9

Пользовательский запрос

Как уже было сказано, мы можем расширить базовый класс Request, чтобы мы могли реализовать нашу логику. В этом случае мы должны переопределить два метода:

  • parseNetworkResponse
  • deliverResponse

В первом методе мы должны извлечь данные из ответа, в то время как в другом мы уведомляем ответ. Мы рассмотрим эти аспекты в некоторых других постах.

  • Исходный код скоро будет доступен.

Ссылка: Android Volley Tutorial: опубликуйте и загрузите изображение от нашего партнера JCG Франческо Аццолы в блоге Surviving w / Android .