- Отправляем GET запрос в Android без Apache
- Android. GET и POST запросы к web серверу
- Подготовка
- Работа с GET запросом
- Работа с POST запросом
- Рекомендуемые
- Комментарии
- Как я могу сделать простой HTTP-запрос в MainActivity.java? (Android Studio)
- 3 ответа
- Какую библиотеку работы с HTTP в Android выбрать?
- Для чего это вообще?
- Немного истории
Отправляем GET запрос в Android без Apache
Когда заходит разговор о работе с HTTP под Android чаще всего сразу же вспоминают библиотеку классов от Apache. При этом незаслуженно игнорируя другой не менее эффективный способ обмена данными.
Этот способ по праву можно считать если не очевидным, то, по крайней мере, хорошо известным для тех, кто программирует на Java. Однако в среде Android разработчиков он пока почему-то не получил широкого распространения.
Речь идёт о пакете java.net, который входит в состав «обычного» Java SE, но доступен также и в Android.
Для отправки запроса потребуется всего два класса из этого пакета URL и HttpURLConnection.
Вначале создадим подключение к тому ресурсу, к которому планируется оправить запрос. Для этого создадим объект класса URL и на его основе получим объект класса HttpURLConnection.
Затем собственно отправляем сам запрос и обрабатываем результат:
В чём преимущество java.net перед Apache?
- Это стандартный пакетJava.
Для его использования не требуется устанавливать или подключать каких-либо сторонних библиотек. А, писать программы с его использованием можно практически «не оглядываясь» на версию Android; - Больше возможностей контролировать процесс обмена данными.
В частности, можно без труда анализировать ответ сервера, что часто требуется при работе с RestAPI; - Более простая и компактная реализация программ для работы сHTTP.
Для того чтобы отправить даже простой запрос в библиотеке от Apache требуется работа с тремя объектами. В java.net всё сводится, по сути, к одному HttpURLConnection. При этом без ущерба для архитектуры приложения; - JavaSE и, в частности,java.net превосходно документированы.
К сожалению, этого нельзя сказать о библиотеке от Apache. Документация по ней представлена только в виде примеров, которые уже не актуальны для более новых версий.
Последнее преимущество обычно принято как-то сбрасывать со счетов. Однако про него почему-то столь же часто вспоминают, когда дело доходит до сложных или просто не тривиальных задач и все остальные способы разобраться в проблеме исчерпаны. О том насколько влияет наличие и качество документации на возможность освоения для новичков, и говорить не приходится.
Из недостатков рассматриваемого способа можно отметить только один. HttpURLConnection позволяет получить данные только в виде набора байт. Поэтому, чтобы получить ответ с сервера в виде строки требуется выполнить преобразования.
Источник
Android. GET и POST запросы к web серверу
5 сентября 2016 г. 3 Yehor Rykhnov 12700 android, java—>
Довольно часто приложению необходимо обмениваться информацией с сервером, для этого используется HTTP или HTTPS протокол. Рассмотрим простой пример запроса к серверу и получение ответа от него.
Запросы к web серверу нужно выполнять в отдельном потоке.
Подготовка
Установим в манифесте разрешение на работу с интернетом:
Работа с GET запросом
Для передачи спец символов (например: !»№;%?()) необходимо их преобразовать с помощью URLEncoder:
Работа с POST запросом
Если у вас есть вопросы или предложения по улучшению кода описанного в статье пишите в комментариях.
Я всегда открыт к конструктивному диалогу
Рекомендуемые
Комментарии
Для того, чтобы работал DefaultHttpClient — нужно установить бибилотеку apache.http. Для этого, в Android Studio:
1. Открываем Build->Edit Libraries and Dependencies->Dependencies.
2. Нажимаем на плюсик (+)
3. Выбираем Library Dependency
4. В поле поиска пишем org.apache.http и нажимаем «Enter» или жмем на кнопку поиска
Должно найти библиотеку org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2
5. Выбираем ее.
6. Жмем «Ok»
Если хотим тестить на локальном сервере — обращаемся к локальному хосту по ip. К хосту привязываем ip сетевой карты.
Подскажите плиз, как написать POST для https?
У компьютера всегда есть оправдание, у программиста — никогда
кодер.укр
Мы публикуем полезные материалы для веб разработчика с подробным описанием без лишней «воды», с рабочими (проверенными) примерами.
Основная наша задача — это донести материалы максимально просто и понятно до читателя.
Вы можете связаться с нами по э-почте: info@кодер.укр
или с помощью формы обратной связи
Семён • 3 июля 2021 г., 1:39 Вопрос .Как сделать так , чтобы в tor браузер был постоянный ip адрес ..У меня проблема в. Как изменить размер шрифта текста, чтоб был больше 5ти? |
Dmentiy • 19 мая 2021 г., 13:15 Спасибо за мануал, наконец то руки дошли до авторизации. В миграцию добавил пользователя п. Подпишитесь на рассылку и Вы будете получать новые статьи первым. Copyright © 2014 — 2021 by кодер.укр. All Rights Reserved. Источник Как я могу сделать простой HTTP-запрос в MainActivity.java? (Android Studio)Я использую Android Studio, и я потратил несколько часов, пытаясь выполнить простой HTTP-запрос в моем файле MainActivity.java, и пробовал несколько способов, и видел много веб-страниц по этой теме, но не могу понять. Когда я пробую OkHttp, я получаю сообщение об ошибке, что не могу сделать это в основном потоке. Сейчас пытаюсь сделать так: Я помещаю этот метод непосредственно в MainActivity.java, и мое событие щелчка выполняет его из другого метода, который также находится в MainActivity.java: Но сейчас сбоя нет, и я могу сказать, что в строке, которая запускает BufferedReader, возникло исключение, но e.getMessage () пуст. Я новичок в Android Studio и java, поэтому, пожалуйста, помогите мне с этой очень простой проблемой. В конце концов, мне нужно будет отправлять запросы на сервер, и кажется, что OkHttp — лучший способ, но я не нахожу «Hello World» OkHttp в Android Studio, документированного где-либо в Интернете. 3 ответаВы не должны делать сетевые запросы в основном потоке. Задержка непредсказуема и может привести к зависанию пользовательского интерфейса. Android форсирует это поведение, генерируя исключение, если вы используете объект HttpUrlConnection из основного потока. Затем вы должны сделать свой сетевой запрос в фоновом режиме, а затем обновить пользовательский интерфейс в основном потоке. Класс AsyncTask может быть очень удобен для этого варианта использования. ! И вы начинаете этот процесс так: Вы можете использовать зависимость для выполнения HTTP-запросов или HTTPS-запросов, используйте OkHttp Если вы используете okhttp, тогда вызовите async, попробуйте следующий код Источник Какую библиотеку работы с HTTP в Android выбрать?Представляю вашему вниманию перевод статьи «Which Android HTTP library to use?». Для чего это вообще?Немного истории
Даже сегодня, если вы загляните в исходники Volley от Google (о ней я расскажу чуть попозже), вы сможете найти такое наследие: Это классический пример фрагментации Android, которая заставляет страдать разработчиков. В 2013 году Square обратила внимание на эту проблему, когда выпускала OkHttp. OkHttp была создана для прямой работы с верхним уровнем сокетов Java, при этом не используя какие-либо дополнительные зависимости. Она поставляется в виде JAR-файла, так что разработчики могут использовать ее на любых устройствах с JVM (куда мы включаем, конечно, и Android). Для упрощения перехода на их библиотеку, Square имплементировали OkHttp используя интерфейсы HttpUrlConnection и Apache client. OkHttp получила большое распространение и поддержку сообществом, и, в конце-концов, Google решили использовать версию 1.5 в Android 4.4 (KitKat). В июле 2015 Google официально признала AndroidHttpClient, основанный на Apache, устаревшим, вместе с выходом Android 5.1 (Lolipop). Сегодня OkHttp поставляется со следующим огромным набором функций:
Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами: Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п. Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:
Все, что ни есть в Volley, находится на вершине HttpUrlConnection. Если вы хотите получить JSON или изображение, то Volley имеет на это специальный абстракции, такие как ImageRequest и JsonObjectRequest, которые помогают вам в автоматическом режиме конвертировать полезную нагрузку HTTP. Так же достойно внимания то, что Volley использует жестко запрограммированный размер сетевого пула: Когда OkHttp использует поток для каждого вызова с ThreadPoolExecutor с максимальным значением Integer.MAX_VALUE: В результате, в большинстве случаев OkHttp будет действовать быстрее за счет использования бОльшего количества потоков. Если по каким-то причинам вы захотите использовать OkHttp вместе Volley, то есть реализация HttpStack, которая использует API запросов/ответов из OkHttp заместо HttpURLConnection. HTTP клиенты продолжили развиваться для поддержки приложений с большим количеством картинок, особенно тех, кто поддерживает бесконечную прокрутку и трансформацию изображений. В то же время, REST API стал стандартом в индустрии, и каждый разработчик имел дело с такими типовыми задачами как сериализация в/из JSON и преобразование REST-вызовов в интерфейсы Java. Не прошло много времени, как появились библиотеки, решающие эти задачи:
Retrofit предоставляет некий мост между Java кодом и REST-интерфейсом. Он позволяет быстро включить в ваш проект HTTP API интерфейсы, и генерирует самодокументирующуюся реализацию. В дополнение ко всему, Retrofit поддерживает конвертацию в JSON, XML, протокол буферов (protocol buffers). Picasso, с другой стороны, предоставляет HTTP библиотеку, ориентированную на работу с изображениями. Например, вы можете загрузить изображение в свой View с помощью одной строчки: Picasso и Retrofi настроены так, чтобы использовать OkHttpClient как стандартный HTTP клиент. Однако, если хотите, вы можете указать клиентом HttpURLConnection. Glide – что-то похожее на Picasso. Он предоставляет некоторые дополнительные функции, такие как GIF-анимация, генерация миниатюрных эскизов изображения и неподвижные видео. Полное сравнение можно найти здесь. Facebook недавно открыли общественности исходный код библиотеки Fresco, которую они используют в своем мобильном приложении. Одна из ключевых функций, которая выделяет ее, — кастомная стратегия выделения памяти для bitmap’ов, чтобы избежать работы долгого GC (сборщик мусора). Fresco выделяет память в регионе, который называется ashmem. Используются некие трюки, чтобы иметь доступ к этому региону памяти доступ как из части, написанной на C++, так и из части на Java. Чтобы уменьшить потребление CPU и данных из сети, эта библиотека использует 3 уровня кэша: 2 в ОЗУ, третий во внутреннем хранилище. Я нашел необходимым показать отношения между библиотеками на одной схеме. Как вы можете увидеть, HTTP всегда остается внизу у высокоуровневых библиотек. Вы можете выбирать между простым HttpUrlConnection или последним OkHttpClient. Мы используем эту совместимость при разработке PacketZoom Android SDK, о котором мы поговорим в следующем посте. Недавно мы сравнивали между собой HTTP библиотеки по производительности, но эта тема заслужила отдельного рассмотрения. Мы надеемся, что этот обзор дал вам основные идеи о плюсах и минусах каждой библиотеки, и мы помогли вам сделать правильный выбор. Следите за выходом более интересных постов о сетевой работе в Android от нас. Источник |