Android. GET и POST запросы

Очень часто приложения для Android обмениваются информацией с сервером. Для передачи данных между сервером и приложением используется протокол HTTP. Здесь мы рассмотрим как передавать данные на сервер и получать ответ.

Внимание!

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

Подготовка

Установим в манифесте разрешение на проверку интернета:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

GET-запрос

DefaultHttpClient hc = new DefaultHttpClient();
ResponseHandler response = new BasicResponseHandler();
HttpGet http = new HttpGet("http://site.ru/api.php?login=user1&psw=1234");
//получаем ответ от сервера
String response = (String) hc.execute(http, response);

Если надо передать в символы !»№;%?(), то такую строку нужно обработать:
String url = URLEncoder.encode(«ваша %?! строка», «UTF-8»);

POST-запрос

HttpClient httpclient = new DefaultHttpClient();
HttpPost http = new HttpPost("http://site.ru/api.php?");
List nameValuePairs = new ArrayList(2);
nameValuePairs.add(new BasicNameValuePair("login", "user1"));
nameValuePairs.add(new BasicNameValuePair("pswd", "1234"));
http.setEntity(new UrlEncodedFormEntity(nameValuePairs));
String response = (String) httpclient.execute(http, new BasicResponseHandler());

Комментарии:

13 комментариев

  1. Ярослав Ответить

    А как апачевскую библиотеку подключить… Потому что в андроиде 4.0 не импортируются классы. Скачивал с оф сайта, там не нашел где BasicNameValuePair и nameValuePairs. Все остальные добавил. Без этих никак(((

  2. Bogdan Ответить

    Я так понимаю пока ответ не вернется, дальше строки String response = hc.execute(http, response); программа не будет выполнятся ?

  3. Kalys Ответить

    А у меня DefaultHttpClient , ResponseHandler, HttpGet классы не нашел засвечивается красным и предлагает создать такие классы где их брат ?

    • Admin АвторОтветить

      Данный метод отправки запросов устарел, а сами классы были удалены из новых версий Android. Если вы все же хотите использовать данный метод, добавьте в файл build.gradle вашего приложения useLibrary 'org.apache.http.legacy':

      Например:

      android {
          compileSdkVersion 23
          buildToolsVersion "23.0.0"
          useLibrary 'org.apache.http.legacy'
          ...
      }
      • Kalys Ответить

        Спасибо большое! Извините можете подсказать данный время какие методы актуальны ?

        • Admin АвторОтветить

          Если запросов много, то вы можете использовать Retrofit. Иначе OkHttp или ion. Более полный список библиотек для отправки запросов с примерами можно найти здесь.

      • Den Ответить

        Вот что пишет Gradle когда добавил: useLibrary ‘org.apache.http.legacy’
        Build script error, unsupported Gradle DSL method found: ‘useLibrary()!’

        • Admin АвторОтветить

          Хм, тут 2 варианта:

          1) Вы прописали команду не в том месте
          2) Данная команда не поддерживается вашей версией Gradle

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *