New url android studio

HttpURLConnection: Подключаемся к URL

4-й курс/закрытая зона

Знакомство с классом HttpURLConnection

Для соединения с веб-серверами Android предлагает несколько способов взаимодействия. В новых проектах для современных устройств рекомендуется использовать класс HttpURLConnection, который мы с вами рассмотрим на примерах.

Класс java.net.HttpURLConnection является подклассом java.net.URLConnection и позволяет реализовать работу по отправке и получении данных из сети по протоколу HTTP. Данные могут быть любого типа и длины. Данный класс следует использовать для отправки и получения потоковых данных, размеры которых нельзя заранее определить. Используя данный класс, вам не нужно думать о сокетах и реализовывать собственные способы общения между клиентом и сервером.

Алгоритм использования следующий:

  • Получить объект HttpURLConnection через вызов URL.openConnection() и привести результат к HttpURLConnection
  • Подготовить необходимый запрос. Основное в запросе — сам сетевой адрес. Также в запросе можно указать различные метаданные: учётные данные, тип контента, куки сессии и т.п.
  • Опционально загрузить тело запроса. В этом случае используется метод setDoOutput(true). Передача данных, записанных в поток, возвращается через метод getOutputStream()
  • Прочитать ответ. Заголовок ответа обычно включает метаданные, такие как тип и длина контента, даты изменения, куки сессии. Прочитать данные из потока можно через метод getInputStream(). Если у ответа нет тела, то метод возвращает пустой поток.
  • Разорвать соединение. После прочтения ответа от сервера HttpURLConnection следует закрыть через вызов метода disconnect(). Тем самым вы освобождаете ресурсы, занимаемые соединением.

Например, для получения страницы по адресу http://developer.alexanderklimov.ru/android/ можно использовать такой код:

По умолчанию HttpURLConnection использует метод GET. Для использования POST вызывайте setDoOutput(true) и посылайте данные через openOutputStream(). Другие HTTP-методы (OPTIONS, HEAD, PUT, DELETE and TRACE) настраиваются через метод setRequestMethod(String).

Для работы через прокси-сервер используйте URL.openConnection(Proxy) при создании соединения.

Каждый экземпляр HttpURLConnection может использоваться только для одной пары запроса/ответа. Операции с соединениями следует проводить в отдельном потоке.

Вы вошли на сайт, как гость.
Необходимо зарегистрироваться, чтобы прочитать статью

Источник

ИнтеллигенцияX

Как в Android Studio передавать данные на сервер в интернете

Три поста назад я показал, как в Android Studio хранить локальные настройки (ФИО, должность и телефон спонсора — https://ds-release.ru/kak-rabotat-s-bazoj-dannyx-sqlite-v-android-studio/ ) в базе SQLite

А как передавать данные на центральный сервер приложения в интернете?

В данном примере сервер будет на php, но можно любой, данные будут передаваться на сервер методом POST.

Сначала в AndroidManifest.xml добавим строку

В activity_main.xml располагаем аналогичный (как в примере с SQLite) код

А вот в кнопке «Сохранить» напишем не сохранение в локальную SQLite, а передачу информации о спонсоре на сервер.

Для этого можно использовать, например, POST запрос с передачей параметров.

Используем асинхронное соединение с AsyncTask.

В файле MainActivity пишем такой код:

Если на сервере будет, например, php скрипт server.php такого содержания

Он запишет переданные в переменных данные в базу MySQL в таблицу DATA значения имени, должности и телефона.

Похожие записи:

4 комментария

Добрый день! Использую ваш код как исходник для своего приложения.
Я разрабатываю приложение WI-FI сканер, который после сканирования отправляет данные на сервер (данные такого типа имя сети, тип защиты, уровень сигнала, аппаратный адрес маршрутизатора) и при тестировании сервер не реагирует на то что я отправляю. На какой версии android работало у вас?
Подскажите пожалуйста причину?
Программирую недавно столкнулся вот с такой проблемой

Работало на всех аппаратах, на которых тестировал, андроид с 4 по 7
А Вы уверены, что проблема именно в версии андроида, а не на стороне веб сервера? Запускайте отладку, смотрите что передаете на сервер, со стороны сервера что на него приходит, думаю, разберетесь

Читайте также:  Чтобы андроид не сканировал папку

Сделайте урок о том, как принимать данные с сервера. Спасибо

resultString = new String(data, «UTF-8»); // сохраняем в переменную ответ сервера, у нас «OK»

Вот и приняли данные с сервера :).
А потом с этим resultString можете делать, что хотите.

Источник

Особенности HttpUrlConnection из java.net

сегодня постараюсь рассказать о том, как можно отправить запрос и прочитать ответ от HTTP сервера, используя URLConnection из библиотеки JRE.

Сейчас изучаем Java в онлайн режиме. Вся наша команда использует Slack для работы и общения. Для получения информации о пользователях, используем Slack API. Чтобы долго не рассказывать про сам API (это тема для отдельной статьи), скажу коротко: Slack API построен на HTTP протоколе, для получения информации о пользователях, нужно отправить запрос с URI в котором должно быть имя метода из API на host-адресс api.slack.com Вот список некторых методов:

  • users.list
  • chat.postMessage
  • conversations.create
  • files.upload
  • im.open

Для получения списка юзеро нужен метод users.list. Формируем URI — /api/users.list в теле запроса должен быть токен аутентификации в форме application/x-www-form-urlencoded, то есть запрос должен выглядеть примерно так (но есть один нюанс который будет ниже):

Я знал про библиотеку Apache HttpComponents, но для иследовательских целей будем использовать средства доступные в стандартной библиотеке Java 8, а именно имплементацию java.net.URLConnection.

Для получений сущности URLConnection нужно использовать объект класса java.net.URL, его конструктор принимает тип String где помимо всего должен быть указан протокол – в нашем случае https.

После получения сущности URL, вызываем метод openConnection() который возвратит нам сущность HttpsUrlConnection.

При этом нужно обработать или пробросить MalformedUrlException и IOException.

После этого переменная connection будет хранить ссылку на объект HttpsUrlConnectionImpl. По умолчанию будет формироваться GET-запрос, для того чтобы добавить Header используем метод setRequestProperty(), который принимает key и value. Нам здесь нужно установить Content-Type который имеет значение application/x-www-form-urlencoded. Ну, и мы это делаем!

Теперь осталось только отправить запрос записав в тело наш токен и лимит. Для этого нужно установить поле doOutput объекта connection в положение true, используя метод setDoOutput();

Далее самая интересная часть — нужно как-то передать наше тело запроса в OutputStream. Будем использовать OutputStreamWriter:

Есть один нюанс: после того, как мы вызвали метод getOutputStream() метод запроса меняется на POST, так как GET не предусматривает наличие request body, но благо что slack ни ставит твёрдое ограничение на метод поэтому всё было хорошо. И поэтому GET-запрос должен выглядеть так:

Но я не стал уже переделывать. И вместо этого наш запрос получился таким:

(*некоторые headers ставятся самим HttpsUrlConnection и здесь они отсутствуют)

И так чтоб записать наше тело запроса пользуемся write();.

После этого наш запрос будет отправлен, и мы можем прочитать полученный ответ. Важно закрывать OutputStream или делать flush(), перед тем как получать InputStream, иначе данные не уйдут из буффера(как альтернатива можно использовать PrintStream — в методе println() по умолчанию вызывается flush()). Для чтение использовал BufferedReader:

(*используем lines() чтобы получить Stream на выходе; \r\n – символ CRLF – вставляет переход на новую строку)

И, если мы успешно проходим аутентификацию, переменная respBody должна хранить наш ответ от сервера, что в нашем случае является JSON объектом. После этого, его можно отправлять на следующий этап обработки.

После некоторой оптимизации всё выглядет так:

Источник

Android HttpURLConnection Example

This article will tell you how to use java.net.HttpURLConnection class to send http request and get http server response in android application.

1. HttpURLConnection use steps.

  1. Create a URL instance.
  2. Open url connection and cast it to HttpURLConnection.
  3. Set request method. The request method can be GET, POST, DELETE etc. Request method must be uppercase, otherwise below exception will be thrown. java.net.ProtocolException: Expected one of [OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, PATCH] but was get
  4. If request method is GET, then use below code to open input stream and read server response data.
  5. For POST request method, use below code to open output stream to the server url and write post data to it. After post, open the input stream again to get server response.
  6. After use HttpURLConnection, do not forget close related reader or writer and call HttpURLConnection’s disconnect() method to close the connection to release network resources.
Читайте также:  Android выключается экран при звонке

2. HttpURLConnection Examples.

If you can not watch the above video, you can see it on the youtube URL https://youtu.be/cCvEVf-OUU4

In this example, read server response process is occurred in a child thread. The child thread send a message to activity main thread’s Handler object to update the response data in TextView.

This is because child thread can not update UI controls in activity directly, otherwise an error will happen.

2.1 Main Activity.

2.2 Main Layout Xml File.

2.3 Android Manifest Xml File.

Because this example will connect network resources, so you need to declare below permission in android manifest xml file.

Источник

Какую библиотеку работы с HTTP в Android выбрать?

Представляю вашему вниманию перевод статьи «Which Android HTTP library to use?».

Для чего это вообще?

Немного истории

До Froyo HttpURLConnection имел некоторые не очень приятные баги. В частности, вызов close() у читаемого InputStream мог испортить пул соединений.

… большой размер их API мешает нам улучшать эту библиотеку без потери обратной совместимости. Команда Android не работает активно над Apache HTTP Client.

Apache HTTP client имеет мало багов на Eclair и Froyo, поэтому он является лучшим выбором для этих версий. А для Gingerbread и младше лучше подходит HttpURLConnection. Простота API и небольшой вес хорошо подходят для Android. Прозрачное сжатие и кэширование ответов помогают увеличить скорость и сохранить батарею. Новые приложения должны использовать HttpURLConnection.

Даже сегодня, если вы загляните в исходники 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 поставляется со следующим огромным набором функций:

  1. Поддержка HTTP/2 и SPDY позволяет всем запросам, идущим к одному хосту, делиться сокетом
  2. Объединение запросов уменьшает время ожидания (если SPDY не доступен)
  3. Прозрачный GZIP позволяет уменьшить вес загружаемой информации
  4. Кэширование ответов позволяет избежать работу с сетью при повторных запросах.
  5. Поддержка как и синхронизированных блокирующих вызовов, так и асинхронных вызовов с обратным вызовом (callback)

Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами:

Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п.

Читайте также:  Аналог winbox для android

Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:

  1. Автоматическое планирование сетевых запросов
  2. Множество параллельных сетевых соединений
  3. Прозрачное кэширование в памяти и на диске, в соответствии со стандартной кэш-согласованностью.
  4. Поддержка приоритизации запросов.
  5. Отмена API запросов. Вы можете отменить как один запрос, так и целый блок.
  6. Простота настройки, например, для повторов и отсрочек.
  7. Строгая очередность, которая делает легким корректное заполнение данными, полученными асинхронно из сети, интерфейса пользователя.
  8. Инструменты отладки и трассировки

Все, что ни есть в 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. Не прошло много времени, как появились библиотеки, решающие эти задачи:

  1. Retrofit – типобезопасный HTTP Android клиент для взаимодействия с REST-интерфейсами
  2. Picasso – мощная библиотека для загрузки и кэширования изображений под Android

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 от нас.

Источник

Оцените статью