Android ответ от сервера

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

5 сентября 2016 г. 3 Yehor Rykhnov 12685 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 сетевой карты.

Источник

Как исправить ошибку при получении данных с сервера на Андроид

У пользователей телефонов и планшетов с операционной системой Android часто возникает проблема с официальным магазином при скачке приложений. В окне появляется надпись, свидетельствующая о неполадки при соединении с сервером, а также код ошибки. Как правило, DF-DFERH. Пользователю доступна кнопка повторной отправки информации.

В этой статье рассказано о том, как решить проблему. Обойти ошибку не удастся, так как в большинстве случаев пользователь не может просматривать содержимое Google Play. Советуем придерживаться инструкции, не пропускать действия. Обратите внимание, что на устройствах от разных производителей названия настроек отличаются. Однако суть остается прежней. Также код в сообщении может быть с префиксом «RH».

Магазин приложений не открывается из-за неполадок с сетью или стороннего программного обеспечения

Для начала стоит проверить следующие настройки. Возможно, для решения не понадобится использовать более радикальные методы:

  1. Измените подключение, поменяйте сеть. Иногда бывает такое, что ошибка исчезает после подключения телефона к другой сети. В таком случае стоит решить проблему с провайдером.
  2. Перезагрузите смартфон, включив функцию безопасного режима. После этого, у некоторых пользователей пропадает неполадка с подключением к серверу. Причина — сторонние приложения. Некоторое программное обеспечение, например, программы для взлома игр, мешают официальному магазину соединиться с сетью. Безопасный режим запускает Андроид устройство только с системными файлами. Это значит, что установленное ПО не будет работать.

Чтобы предотвратить ошибку, не стоит устанавливать всевозможные неофициальные программы для взлома, накрутки, а также очистки смартфона. К ним также относится VPN. Через виртуальные приватные сети Google Play не сможет передать данные на сервер для подключения. Следовательно, дальнейшая работа будет невозможна, поэтому удалить ПО.

Чтобы включить безопасный режим, сделайте это:

  1. Зажмите кнопку блокировки, выберите и удерживайте палец на «Отключить устройство» или «Отключить питание».
  2. После этого появится окно, подтвердите переход в безопасный режим.
Читайте также:  All android phones firmware

На некоторых устройствах процесс отличается. На телефонах и планшетах от Самсунг нужно полностью выключить гаджет. Зажать кнопку включения, после появления логотипа «Samsung» держите клавишу уменьшения громкости. Удерживайте кнопку, пока смартфон не включится.

Если приложение удалять жалко, то отключите его в списке программ.

Очистка кэш-файлов, откат Гугл Плей до предыдущих версий

Этот шаг помогает не во всех случаях, но попробовать стоит. Возможно следующая инструкция решит неполадку с соединением официального магазина Google Play Market с сервером. Суть заключается в удалении кэш-файлов и обновлений Маркета. Ошибка часто происходит на более новых версиях смартфонов. Вероятно, файлы обновления скачались и установились неправильно, чтобы это исправить, сделайте следующее:

  1. Откройте меню настроек. Найдите раздел «Приложения». На некоторых устройствах название опции отличается.
  2. На новых версиях операционной системы нужно открыть полный список приложений — «Показать все программы».
  3. Выберите магазин Google Play. Если возможно, воспользуйтесь поиском.

Нажмите на иконку Play Market. Если версия ОС 8 и выше, то очистите кэш-файлы, всю информацию о программе. Для этого понадобится зайти в пункт «Хранилище». В нем есть все необходимые опции.

Имейте в виду, что после этого нужно повторно выполнить вход в свою учетную запись Google.

После выполненных действий запустите магазин приложений повторно. Проверьте, не исчезла ли ошибка соединения. Некоторым пользователям эти действия помогают. В противном случае откройте настройки еще раз, в списке приложений найдите Play Market, нажмите на кнопку «Отключить». Дальше нужно удалить обновления. Это опция восстановит исходную версию программы, которая изначально была установлена на устройство.

После этого нужно восстановить программу. Нажмите «Включить» в меню настроек. Запустите ПО еще раз, проверьте, подключается ли Маркет к серверу. Иногда оно само начинает обновляться. В таком случае нужно подождать.

Бывает, что вышеописанные шаги не помогают. В таком случае стоит попробовать повторить действия для других сервисов гугл, в том числе, для «Гугл Сервисы», фреймворков и стандартной программы «Загрузки». Последние программы являются системными, это значит, что для их отображения нужно включить опцию в списке приложений. Она находится в правом верхнем углу.

Проблемы с учетной записью Google, вызывающие неполадки с подключением к серверу

При появлении сообщения «Ошибка при соединении с сервером» или об неполадке при получении информации часто помогает сброс учетной записи Гугл на смартфоне или планшете.

Имейте в виду, что при выполнении следующих действий, придется повторно авторизоваться. Для этого нужно знать пароль и адрес электронной почты. В противном случае может возникнуть потребность в восстановлении аккаунта. Чтобы сбросить учетную запись, сделайте это:

  1. Откройте меню настроек.
  2. Перейдите во вкладку «Аккаунты».
  3. Выберите в списке Гугл. В некоторых устройствах этого пункта нет. Поэтому нужно зайти в список аккаунтов электронной почты Gmail.
  4. Удалите аккаунт, нажав соответствующую кнопку.
  5. Добавьте учетную запись в список повторно, введя данные для авторизации.

После выполненных действий, зайдите в Google Play Market еще раз. Если проблема не решилась, перейдите к следующей инструкции.

Включите разрешение для программ от Гугл в настройках телефона или планшета

В операционной системе Android нужно предоставлять разрешения для выполнения различных действий. К примеру, работа программы в фоновом режиме или неограниченная передача данных. Если по умолчанию нужные параметры выключены, то программное обеспечение не сможет корректно работать.

Откройте меню настроек, зайдите в список приложений и найдите «Сервисы Google Play». Нажмите на него. В меню «О приложении» должна быть опция «Передача данных». Включите работу в фоновом режиме, отключите ограничение на использование трафика.

Вернитесь в настройку программы сервисов. Откройте ветку дополнительных параметров. Пункт существует не во всех версиях операционной системы Android. Включите функцию, позволяющую изменять системные настройки. Те же действия стоит повторить для Play Market.

Обновление магазина приложений до последней версии

Еще один способ решить неполадку — скачать установщик Play Market в интернете, установить программу вручную. Для этого нужно загрузить APK-файл. Далее разрешите установку программы на телефон или планшет.

Читайте также:  Install ipa on android

Совет! Скачивайте файлы только с проверенных источников, чтобы не заразить устройство вредоносным ПО.

Эти методы помогут исправить неполадку. Если проблема осталась, то возможно проблема в прошивке. В таком случае стоит сделать резервную копию информации и сбросить настройки до заводских или перепрошить смартфон. Также поломка не является редкостью для китайских телефонов с неофициальной ОС.

Источник

Android для начинающих: использование REST API

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

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

Это может звучать сложно, но с большим количеством сайтов, которые раскрывают свои ресурсы через REST API, на самом деле это довольно просто. (Смотрите руководство для начинающих по HTTP и REST для примера.)

В этом уроке я расскажу вам, как использовать классы и методы, доступные в Android SDK, для подключения к удаленным веб-серверам и взаимодействия с ними с использованием их REST API.

1. Включение доступа к Интернету

Использование REST API, очевидно, связано с использованием Интернета. Тем не менее, приложения Android могут получить доступ к Интернету только в том случае, если у них есть разрешение android.permission.INTERNET . Поэтому перед началом написания любого сетевого кода вы должны убедиться, что в файле манифеста вашего проекта присутствуют следующие uses-permission теги:

Поскольку android.permission.INTERNET не считается опасным разрешением, вам не нужно запрашивать его во время выполнения на устройствах с уровнем API 23 или выше.

2. Создание фоновых потоков

Платформа Android не позволяет выполнять сетевые операции в основном потоке приложения. Поэтому весь ваш сетевой код должен принадлежать фоновому потоку. Самый простой способ создать такой поток — использовать метод execute() класса AsyncTask . В качестве единственного аргумента execute() ожидает объект Runnable .

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

3. Создание HTTP-соединения

Используя метод openConnection() класса URL , вы можете быстро настроить соединение с любой конечной точкой REST. Возвращаемое значение openConnection() должно быть передано в экземпляр HttpURLConnection или HttpsURLConnection , в зависимости от доступа к конечной точке через HTTP или HTTPS. Оба HttpURLConnection и HttpsURLConnection позволяют выполнять такие операции, как добавление заголовков запросов и чтение ответов.

В следующем фрагменте кода показано, как настроить соединение с корневой конечной точкой API GitHub:

Обратите внимание, что HttpsURLConnection является подклассом класса HttpURLConnection .

4. Добавление заголовков запросов

Большинство веб-сайтов, предлагающих REST API, хотят иметь возможность однозначно идентифицировать ваше приложение. Самый простой способ помочь им сделать это — включить уникальный заголовок User-Agent во все ваши запросы.

Чтобы добавить заголовок User-Agent в ваш запрос, вы должны использовать метод setRequestProperty() объекта HttpURLConnection . Например, вот как вы устанавливаете заголовок User-Agent в my-rest-app-v0.1:

Вы можете добавить несколько заголовков к своему запросу, вызвав несколько раз метод setRequestProperty() . Например, следующий фрагмент кода добавляет заголовок Accept и кастомный заголовок Contact-Me :

5. Чтение ответов

После того как вы передали все заголовки запросов, вы можете проверить, есть ли у вас валидный ответ, используя метод getResponseCode() объекта HttpURLConnection .

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

В случае отсутствия ошибок вы можете теперь вызвать метод getInputStream() , чтобы получить ссылку на входящий поток соединения.

Читайте также:  Андроид авто poco x3

Большинство REST API в наши дни возвращают данные, отформатированные как документы JSON. Поэтому, вместо прямого чтения из объекта InputStream , я предлагаю вам создать для него InputStreamReader .

6. Разбор JSON ответов

Android SDK имеет класс JsonReader, который позволяет легко разбирать документы JSON. Вы можете создать новый экземпляр класса JsonReader , передав объект InputStreamReader его конструктору.

То как вы извлекаете определенную часть информации из документа JSON, зависит от его структуры. Например, документ JSON, возвращаемый корневой конечной точкой REST API GitHub, выглядит следующим образом:

Как вы можете видеть, ответ — это только один большой объект JSON, содержащий несколько ключей. Чтобы извлечь из него значение с именем organization_url, вам нужно будет написать следующий код:

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

После того как вы извлечете всю необходимую информацию, вы всегда должны вызвать метод close() для объекта JsonReader , чтобы он освобождал все сохраненные ресурсы.

Вы также должны закрыть соединение, вызвав метод disconnect() объекта HttpURLConnection .

7. Использование разных HTTP методов

HTTP-интерфейсы REST используют методы HTTP для определения типа операции, которая должна выполняться над ресурсом. На предыдущих шагах мы использовали метод HTTP GET для выполнения операции чтения. Поскольку класс HttpURLConnection использует по умолчанию метод GET , нам не нужно было его явно указывать.

Чтобы изменить метод HTTP вашего объекта HttpURLConnection , вы должны использовать его метод setRequestMethod() . Например, следующий фрагмент кода открывает соединение с конечной точкой, принадлежащей httpbin.org, и устанавливает свой HTTP-метод в POST :

Как вы уже знаете, POST -запросы используются для отправки данных на сервер. При записи в выходной поток соединения вы можете легко добавить любые данные в тело запроса POST . Однако, прежде чем вы это сделаете, вы должны убедиться, что вы вызываете метод setDoOutput() объекта HttpURLConnection и передаете ему значение true .

В следующем фрагменте кода показано, как отправить на сервер простую пару «ключ-значение»:

8. Кэширование ответов

Всегда рекомендуется кэшировать ответы HTTP. Таким образом, вы можете не только сократить потребление пропускной способности вашего приложения, но и сделать его более отзывчивым. Начиная с уровня API 13, Android SDK предлагает класс HttpResponseCache , который позволяет легко реализовать кэширование без каких-либо изменений в вашей сетевой логике.

Чтобы установить кэш для вашего приложения, вы должны вызвать метод install() класса HttpResponseCache . Метод ожидает абсолютный путь, указывающий, где должен быть установлен кеш, и число, определяющее размер кеша. Вы можете использовать метод getCacheDir() , если вы не хотите указывать абсолютный путь вручную.

В следующем фрагменте кода устанавливается кеш размером 100 000 байт:

Как только кеш установлен, класс HttpURLConnection начинает использовать его автоматически. Чтобы проверить, работает ли ваш кеш, вы можете использовать его метод getHitCount() , который возвращает количество HTTP-ответов, которые были отправлены из кеша.

Заключение

Существуют тысячи REST API-интерфейсов, которые вы можете свободно использовать в своих приложениях для Android. Используя их, вы можете сделать ваше приложение более информативным, интересным и многофункциональным. В этом уроке вы узнали, как использовать класс HttpURLConnection для использования таких REST API. Вы также узнали, как создать кеш ответов HTTP, который снижает использование потребление сетевого трафика вашим приложением.

Если вы считаете, что использование HttpURLConnection слишком сложное, вам следует обратить внимание на сторонние библиотеки, такие как например, Volley. Библиотеки, подобные этой, используют класс HttpURLConnection внутри, но предоставляют множество удобных методов, которые позволяют сделать ваш код более кратким и читаемым.

Чтобы узнать больше о работе с сетью на платформе Android, вы можете обратиться к руководству по сетевым операциям Android.

Источник

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