Когда мы разрабатываем приложение для Android, обычно мы должны подключаться к удаленному серверу для получения информации. Соединение обычно основано на протоколе HTTP, поскольку обеспечивает простой механизм передачи информации. Более того, почти все платформы предоставляют набор API на основе HTTP, и очень распространен сценарий, когда приложение Android необходимо интегрировать с одной из этих платформ. По этим причинам важно знать, как выбрать лучшую библиотеку Android HTTP. Конечно, лучший выбор зависит от требований нашего приложения для Android, поэтому мы можем предоставить некоторые советы, которые помогут вам выбрать лучшую библиотеку HTTP HTTP для Android в соответствии с нашими потребностями.
Даже если наше приложение не использует напрямую библиотеку Android HTTP , есть тонны библиотек Android, которые используют его (например, аналитика приложений, отчеты о сбоях, платформы Adv и т. Д.)
Как мы уже знаем, Android SDK предоставляет набор API для обработки HTTP-соединения для отправки и получения данных.
HTTP-библиотека Android
HTTP-библиотека Android основана на HttpUrlConnection
. Эта библиотека Android HTTP поддерживает протоколы HTTP и HTTPS и является базовым классом для использования при обработке HTTP-соединения . До Android 6.0 была поставлена еще одна библиотека с Android SDK под названием Android Apache HTTP . Android 6.0 убирает поддержку этой библиотеки и больше не рекомендуется ее использовать.
Если вы все еще хотите использовать эту HTTP-библиотеку Android, вы должны добавить эти строки в свой build.gradle
:
1
2
3
|
android { useLibrary 'org.apache.http.legacy' } |
HttpUrlConnection, как уже было сказано, помогает нам обрабатывать HTTP-соединение. Несколько строк необходимо сделать HTTP-запрос:
1
2
3
4
5
6
7
8
|
HttpURLConnection connection = null ; try { connection = (HttpURLConnection) ( new URL(url)).openConnection(); connection.setRequestMethod( "GET" ); // or post connection.connect(); InputStream is = connection.getInputStream(); } .... |
Даже если его просто использовать, у него есть недостаток: нам не нужно совершать HTTP-вызовы в потоке пользовательского интерфейса. По этой причине приведенный выше фрагмент кода должен быть заключен в другой поток. Обычно класс, используемый с HttpUrlConnection, является AsyncTask
.
По этой и другим причинам многие разработчики предпочитают использовать альтернативные библиотеки Android HTTP. Эти сторонние библиотеки имеют следующие преимущества:
- КПД
- Параллельные запросы
- Система кеширования
- Неблокирующий поток пользовательского интерфейса
- Поддержка HTTP / 2
На уровне обработки HTTP есть две основные библиотеки:
- залп
- OkHTTP
Помимо этих двух библиотек, есть другие библиотеки Android HTTP, которые используются в более конкретных задачах (например, обработка изображений по HTTP, обработка данных JSON и т. Д.).
Android Volley
Android Volley — это библиотека, созданная Google, которая предлагает очень интересные функции, как указано на домашней странице:
- Автоматическое планирование сетевых запросов
- Несколько одновременных сетевых подключений.
- Поддержка приоритизации запросов
- API запроса отмены
Как использовать Android Volley
Чтобы использовать Android Volley в своем проекте , вы должны клонировать его репозиторий:
1
|
git clone https: //android.googlesource.com/platform/frameworks/volley |
и импортировать его как библиотеку. Кроме того, Android Volley работает вокруг класса RequestQueue
, который обрабатывает HTTP-запросы:
1
|
RequestQueue queue = Volley.newRequestQueue(ctx); // ctx is the context |
Наконец, мы можем сделать HTTP-запрос:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
StringRequest req = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String data) { // We handle the response } }, new Response.ErrorListener() { @Override // handle response } ); queue.add(req); |
Вы можете заметить, насколько просто используется Volley и насколько чист код. Нам не нужно реализовывать наш поток для обработки HTTP-соединения, но мы получаем уведомление, когда ответ готов.
Особенно актуально то, что мы можем лучше контролировать процесс создания RequestQueue. Поэтому, используя Android Volley, мы имеем больше контроля над HttpUrlConnection.
В дополнение к этим функциям Android Volley предоставляет некоторый API для обработки загрузки изображений:
01
02
03
04
05
06
07
08
09
10
|
ImageRequest ir = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { if (listener != null ) listener.onImageReady(response); } }, 0 , 0 , null , null ); queue.add(ir); |
OkHTTP
OkHTTP — еще одна интересная библиотека для обработки HTTP-соединений.
Основные преимущества, предоставляемые OkHTTP:
- Поддержка HTTP / 2
- Пул подключений
- Кэширование ответов
Вы можете посмотреть на официальном сайте, чтобы узнать больше. Основной класс этой библиотеки — OkHttpClient . Используя этот класс, вы можете обрабатывать HTTP-соединение.
1
|
OkHttpClient client = new OkHttpClient(); |
Можно настроить HTTP-клиент, задав размер кэша, время ожидания и т. Д.
Как только экземпляр этого класса станет доступен, вы можете начать делать запросы:
1
|
Request request = new Request.Builder().url(url).build(); |
и наконец:
01
02
03
04
05
06
07
08
09
10
11
|
client.newCall(request).enqueue( new Callback() { @Override public void onFailure(Request request, IOException e) { // Handle error } @Override public void onResponse(Response response) throws IOException { //handle response } }); |
Как вы можете заметить, это очень просто, и вам не нужно создавать разные потоки для обработки HTTP-запросов. OkHTTP обрабатывает это для вас и предоставляет два метода обратного вызова, чтобы вы получали уведомление, когда ответ готов или произошла ошибка.
Кроме того, вы также можете обрабатывать запросы HTTP Post:
1
2
3
4
|
Request request = new Request.Builder() .url(url) .post(body) .build(); |
Даже если планирование запросов удобно, OkHTTP предлагает возможность сделать запрос блокировки HTTP:
1
|
Response response = client.newCall(request).execute(); |
Будьте в курсе, используя этот вид запроса!
Специализированные HTTP-библиотеки
К настоящему времени все библиотеки, которые мы рассмотрели, используются для обработки HTTP-запросов и чтения ответов. Существуют другие виды библиотек HTTP, которые являются более специализированными и могут быть очень полезны в конкретном сценарии.
Одна интересная HTTP-библиотека — RetroFit . Модернизация обеспечивает связь между интерфейсами Java и Rest. Это Android Rest Client, используемый для использования услуг Rest. Он использует OkHTTP в качестве обработчика HTTP-соединения и может быть настроен на использование нескольких конвертеров для сериализации и десериализации данных.
Поддерживаются следующие конвертации:
- Gson
- Джексон
- Moshi
- Protobuf
- провод
- Простой XML
- Скаляры
Другая интересная библиотека — Пикассо, используемая для загрузки и кэширования изображений. Так что эта библиотека полезна, когда мы имеем дело с изображениями.
Glide — это библиотека, которая предоставляет такие функции, как Picasso для обработки изображений. Кроме того, Glide имеет интересные функции для извлечения, декодирования и отображения видео.
Чтобы использовать Glide в проекте Android:
1
2
3
4
5
6
7
8
|
repositories { mavenCentral() } dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' ...... } |
В заключение, в конце этой статьи вы получили обзор библиотеки Android HTTP и о том, как правильно выбрать библиотеку HTTP в соответствии с вашими потребностями.
Ссылка: | Библиотека HTTP Android: обработка HTTP, JSON, изображений от нашего партнера JCG Франческо Аццолы в блоге Surviving с Android . |