Android данные с post запроса

SELECT * FROM Vzakladke.net

Статьи об автоматизации и программировании

Простой пример отправки данных формы POST-запросом на Android

Отправка данных формы через Андроид не так сложна, как может показаться это на первый взгляд. У многих начинающих могут возникнуть проблемы с тем, что приложение падает после вызова функции отправки сообщения, так как в сети очень распространены примеры, которые не являются рабочими. Основная причина многих ошибок в том, что люди забывают, что для Андроид приложения нужен асинхронный метод отправки данных через AsyncTask.

Предлагаю рассмотреть вариант с отправкой данных из приложения на Android с данными из двух полей на заранее подготовленный сервер, где будет обрабатываться наш запрос. Для начала необходимо воссоздать макет страницы. Пусть кнопка отправки сообщений будет вверху, нам так удобнее при работе с приложением, и добавим два поля EditText и один ProgressBar (который в приложении при загрузке сначала должен быть невидимым, я укажу это в коде активити).

Теперь нарисуем разметку activity_main.xml:

После того как мы добавили разметку нашему приложению хотелось бы сразу оговорить и права доступа приложения к интернету, иначе понятно что ничего работать не будет. Поэтому сразу после блока добавим разрешение нашему приложению:

Дальше нам понадобится модуль apache. Так как программа разрабатывалась в Eclipse ADT — проблем с поиском этого модуля не было. Сначала пропишем все необходимые модули для нашего приложения:

Теперь рассмотрим JAVA код нашего приложения в MainActivity.java, которое по нашей задумке должно отправлять данные на сервер.

Первое что необходимо выделить отдельно, так это наши переменные связанные с серверной стороной, поскольку так будет легче в будущем контролировать код на клиенте и на сервере в случае необходимости проведения каких то изменений, например SERVER_URL — это адрес нашего скрипта на сервере, SERVER_TITLE — это заголовок нашей статьи и SERVER_MESSAGE — текст нашей статьи, который мы будем «постить» через форму из Андроид-приложения. Далее по коду мы в методе doInBackground сделаем вызов нашей функции асинхронной отправки данных на сервер и в методе onPostExecute оставим уведомление о том, что информация была направлена после нажатия кнопки отправки и очистим нашу форму.

Считайте, что бонусом здесь указана кнопка закрытия для окна нашего приложения, поэтому в res/values/strings.xml добавим нашу переменную с обозначением нашей кнопки:

и разметка самого меню будет выглядеть таким образом, где android:showAsAction=»always|withText» скажет нашему приложению чтобы кнопка отображалась как текст, а не в выпадающем списке.

Чтобы принять это сообщение на стороне сервера в качестве примера приведем php-скрипт, в первом варианте для сохранения в базе данных:

Другой вариант — сохранение в файл submittedmsg.html, выбирайте какой Вам способ больше нравится для теста.

Дата публикации: 2016-07-12 09:57:23

Источник

Android. GET и POST запросы к web серверу

5 сентября 2016 г. 3 Yehor Rykhnov 12683 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?

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

Источник

Отправка POST-данных в Android

У меня есть опыт работы с PHP, JavaScript и многими другими языками сценариев, но у меня нет большого опыта работы с Java или Android.

Я ищу способ отправки данных POST в скрипт PHP и отображения результатов.

* Обновленный ответ, который работает на Android 6.0+. Спасибо @Rohit Suthar , @Tamis Bolvari и @sudhiskr за комментарии. *

Старый ответ

Примечание: это решение устарело. Работает только на устройствах Android до 5.1. Android 6.0 и выше не включают в себя HTTP-клиент Apache, используемый в этом ответе.

Http Client от Apache Commons — это путь. Он уже включен в Android. Вот простой пример того, как сделать HTTP Post используя его.

для Android => 5

В org.apache.http классы и AndroidHttpClient класса были устаревшими в Android 5.1 . Эти классы больше не поддерживаются, и вы должны как можно скорее перенести любой код приложения с помощью этих API в классы URLConnection .

Мысль поделиться своим кодом с помощью HttpUrlConnection

Также вы можете опубликовать метод:

Обновление 21/02/2016

для отправки запроса с помощью json , см. этот пример:

ОБНОВЛЕНИЕ 24/08/2016

Используйте лучшую библиотеку, такую ​​как:

  • Избегайте HttpUrlConnection и HttpClient

На более низких уровнях API (в основном на Gingerbread и Froyo) HttpUrlConnection и HttpClient далеки от совершенства

  • И избегайте AsyncTask слишком
  • Они намного быстрее
  • Они все кешируют

С момента появления Honeycomb (API 11) было обязательным выполнять сетевые операции в отдельном потоке, отличном от основного потока

Таким образом, мы можем отправлять данные методом http post и получать результат

Это пример того, как размещать данные из нескольких частей БЕЗ использования внешних библиотек Apache:

к @primpop answer я бы добавил, как преобразовать ответ в строку:

Лучше использовать Apache Commons HttpClient, который также включен в Android. Посмотрите на Android Developer: Apache HTTP Client Package для получения общей информации о API.

Вы можете использовать это для отправки HTTP-запроса POST на URL. Вы можете легко отправить запрос и получить ответ. Я всегда использую это. Я хорошо работаю со мной.

Вы также должны добавить ниже файл Jar в папке libs

Наконец отредактируйте свой build.gradle

В последнем перестрой свой проект.

Используйте okHttp библиотеку с открытым исходным кодом от Square. okHttp работает с Android 2.3 и выше и имеет лицензию Apache 2.0 на GitHub .

Отправка данных POST так же проста, как добавление следующего в AsyncTask:

okHttp также есть пространство имен на maven, поэтому добавить его в проект Android Studio очень просто. Просто добавьте compile ‘com.squareup.okhttp3:okhttp:3.11.0’ в свое приложение build.gradle.

Полный код

Добавьте в свою деятельность следующее:

И назовите это используя:

У меня работает следующее:

Вы можете использовать URLConnection с , (для отправки данных) и (для получения). У Sun есть пример именно для этого . setDoOutput (true) getOutputStream() getInputStream()

Если вы просто хотите добавить данные в URL-адрес, вы можете сделать это с помощью HttpUrlConnection, так как теперь HttpClient устарел. Лучшим способом было бы использовать библиотеку как

Залп модернизации

Мы можем публиковать данные в php-скрипте, извлекать результаты и отображать их, используя этот код, выполняемый через класс AsyncTask.

Но использование таких библиотек, как volley или retrofit, гораздо лучше, потому что класс Asynctask и HttpurlConnection работают медленнее, чем библиотеки. Также библиотека будет загружать все и быстрее.

Источник

Как отправить POST запрос в JSON, используя HTTPClient в Android?

Я пытаюсь выяснить, как POST JSON из Android с помощью HTTPClient. Я пытался понять это некоторое время, я нашел много примеров в Интернете, но я не могу заставить их работать. Я считаю, что это из-за моего отсутствия знаний JSON/сетей в целом. Я знаю, что существует множество примеров, но кто-то может указать мне на настоящий учебник? Я ищу пошаговый процесс с кодом и объяснением того, почему вы делаете каждый шаг или что делает этот шаг. Это не должно быть сложным, достаточно будет простого.

Опять же, я знаю, что есть масса примеров, я просто ищу пример с объяснением того, что именно происходит и почему так происходит.

Если кто-то знает о хорошей Android книге по этому вопросу, пожалуйста, дайте мне знать.

Еще раз спасибо за помощь @terrance, вот код, который я описал ниже

О компании JSON

JSON означает JavaScript Object Notation. В свойствах JavaScript можно ссылаться как object1.name , так и object[‘name’]; . Пример из статьи использует этот бит JSON.

Читайте также:  Appdata local android sdk tools emulator exe

Детали
Объект вентилятора с адресом электронной почты в качестве ключа и значением [email protected]

Таким образом, эквивалент объекта будет fan.email; или fan[’email’]; . Оба будут иметь одинаковое значение ‘[email protected]’ .

О HttpClient Запрос

Вот что наш автор использовал для HttpClient Request . Я не претендую на то, чтобы быть экспертом во всем этом, поэтому, если у кого-то есть лучший способ Word, некоторые терминологии не стесняйтесь.

Карта

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

Пожалуйста, не стесняйтесь комментировать любые вопросы, которые возникают в связи с этим сообщением, или если я не разъяснил что-либо, или если я не затронул то, о чем вы все еще не понимаете . и т.д., что бы ни возникало у вас в голове.

(Я снесу, если Джастин Грамменс не одобрит. Но если нет, то спасибо Джастину за то, что он был крут.)

Обновление

Я просто случайно получил комментарий о том, как использовать код, и понял, что в возвращаемом типе была ошибка. Сигнатура метода была настроена так, чтобы возвращать строку, но в этом случае она ничего не возвращала. Я изменил подпись на HttpResponse и отсылаю вас по этой ссылке на Получение тела ответа HttpResponse переменная пути — это URL, и я обновил ее, чтобы исправить ошибку в коде.

Вот альтернативное решение для ответа @ Terrance. Вы можете легко перенести конвертацию. библиотека Gson прекрасно справляется с преобразованием различных структур данных в JSON и наоборот.

Подобное можно сделать, используя Джексон вместо Gson. Я также рекомендую взглянуть на Retrofit , который скрывает для вас много этого стандартного кода. Для более опытных разработчиков я рекомендую попробовать RxAndroid .

Я рекомендую использовать это HttpURLConnection вместо HttpGet . Поскольку HttpGet уже устарело в Android уровне API 22.

Слишком много кода для этой задачи, проверьте эту библиотеку https://github.com/kodart/Httpzoid Is использует GSON внутри и предоставляет API, который работает с объектами. Все детали JSON скрыты.

Есть несколько способов установить соединение HHTP и извлечь данные из веб-службы RESTFULL. Самый последний — GSON. Но прежде чем перейти к GSON, вы должны иметь представление о наиболее традиционном способе создания HTTP-клиента и выполнения обмена данными с удаленным сервером. Я упомянул оба метода для отправки POST & GET запросов с использованием HTTPClient.

Источник

Какую библиотеку работы с 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)
Читайте также:  Как установить андроид через fastboot

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

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

Кстати, не осталась у обочины и 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 от нас.

Источник

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