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 comments

  1. Макс Reply

    Спасибо. Все просто, понятно и РАБОТАЕТ.

  2. Ярослав Reply

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

    • Aida Reply

      v gradle build est object «android» dobav tuda eto:
      useLibrary «org.apache.http.legacy»

      rabotat budet

  3. Bogdan Reply

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

  4. Kalys Reply

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

    • Admin Post authorReply

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

      Например:

      android {
          compileSdkVersion 23
          buildToolsVersion "23.0.0"
          useLibrary 'org.apache.http.legacy'
          ...
      }
      • Kalys Reply

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

        • Admin Post authorReply

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

      • Den Reply

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

        • Admin Post authorReply

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

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

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

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

8 + 1 =