- Какую библиотеку работы с HTTP в Android выбрать?
- Для чего это вообще?
- Немного истории
- How to send HTTP request GET/POST in Java
- 1. Apache HttpClient
- 2. OkHttp
- 3. Java 11 HttpClient
- 4. HttpURLConnection
- References
- Comments
- Android OkHttp3 Http Get Post Request Example
- 1. OKHttp Characters.
- 2. Add OkHttp3 Library In build.gradle.
- 2. Use OkHttp3 To Create HTTP Get Request Method Call Object.
- 3. Use OkHttp3 To Create HTTP Post Request Method Call Object.
- 4. Send Http Request Synchronously And Asynchronously.
- 5. OkHttp Get Post Request Example.
- Сделайте HTTP-запрос с android
- 11 ответов
- обновление
- Оригинальный Ответ
- Android Http Get and Post Example with OkHttp
- 1. Create a New Android Studio Project
- 2. Create the layout of the project
- 3. Creating the source code of the AndroidHttpPostGetActivity Activity
- 4. AndroidManifest.xml
- 5. build.gradle
- 6. Build, compile and run
- 7. Download the Android Studio Project
Какую библиотеку работы с 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 поставляется со следующим огромным набором функций:
- Поддержка HTTP/2 и SPDY позволяет всем запросам, идущим к одному хосту, делиться сокетом
- Объединение запросов уменьшает время ожидания (если SPDY не доступен)
- Прозрачный GZIP позволяет уменьшить вес загружаемой информации
- Кэширование ответов позволяет избежать работу с сетью при повторных запросах.
- Поддержка как и синхронизированных блокирующих вызовов, так и асинхронных вызовов с обратным вызовом (callback)
Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами:
Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п.
Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:
- Автоматическое планирование сетевых запросов
- Множество параллельных сетевых соединений
- Прозрачное кэширование в памяти и на диске, в соответствии со стандартной кэш-согласованностью.
- Поддержка приоритизации запросов.
- Отмена API запросов. Вы можете отменить как один запрос, так и целый блок.
- Простота настройки, например, для повторов и отсрочек.
- Строгая очередность, которая делает легким корректное заполнение данными, полученными асинхронно из сети, интерфейса пользователя.
- Инструменты отладки и трассировки
Все, что ни есть в 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. Не прошло много времени, как появились библиотеки, решающие эти задачи:
- Retrofit – типобезопасный HTTP Android клиент для взаимодействия с REST-интерфейсами
- 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 от нас.
Источник
How to send HTTP request GET/POST in Java
By mkyong | Last updated: October 11, 2019
Viewed: 2,490,821 (+1,406 pv/w)
In this article, we will show you a few examples to make HTTP GET/POST requests via the following APIs
- Apache HttpClient 4.5.10
- OkHttp 4.2.2
- Java 11 HttpClient
- Java 1.1 HttpURLConnection (Not recommend)
1. Apache HttpClient
In the old days, this Apache HttpClient is the de facto standard to send an HTTP GET/POST request in Java.
2. OkHttp
This OkHttp is very popular on Android, and widely use in many web projects, the rising star.
3. Java 11 HttpClient
In Java 11, a new HttpClient is introduced in package java.net.http.*
The sendAsync() will return a CompletableFuture , it makes concurrent requests much easier and flexible, no more external libraries to send an HTTP request!
4. HttpURLConnection
This HttpURLConnection class is available since Java 1.1, uses this if you dare рџ™‚ Generally, it’s NOT recommend to use this class, because the codebase is very old and outdated, it may not supports the new HTTP/2 standard, in fact, it’s really difficult to configure and use this class.
The below example is just for self reference, NOT recommend to use this class!
References
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.
Comments
Maybe consider using a StringBuilder instead of the StringBuffer?
Thanks, article is updated.
very helpfull Thanks !!
Thank for Sharing this post with us. Very Helpfull and usefull Information. Hope you keep it up in future also by providing informative post.This Post is very much handy.Best of Luck & Cheers.
Thank You
I just copied the post method u’ve created and wanted to use it somewhere the same way as you did. It is just like your class but without the get() thing
Источник
Android OkHttp3 Http Get Post Request Example
This example will show you how to use OkHttp3 to send get or post HTTP request to a web server and how to parse and display response text in an Android TextView.
1. OKHttp Characters.
- OkHttp3 is a third-party open-source library that is contributed by the square company. It has below characters.
- User-friendly API.
- Support http2, sharing the same socket for all requests from a machine.
- Built-in connection pool, support for connection reuse, and reduction of delay.
- Supports transparent gzip compression response.
- Avoid duplicate requests by caching.
- Automatically retry the host’s other IP and redirect automatically when the request fails.
2. Add OkHttp3 Library In build.gradle.
- Before you can use the OkHttp3 library, you need to add dependencies in the build.gradle file in android studio as below.
- You can get the most recent build library from https://github.com/square/okhttp.
- After adding the below code, you need to click the Sync Now link in the top right corner to sync the project.
2. Use OkHttp3 To Create HTTP Get Request Method Call Object.
- The below source code snippet will use the OkHttp3 library to create an HTTP GET request.
3. Use OkHttp3 To Create HTTP Post Request Method Call Object.
- The below source code snippet will use the OkHttp3 library to create an HTTP POST request.
4. Send Http Request Synchronously And Asynchronously.
- You can send HTTP GET or POST requests with OkHttp3 synchronously or asynchronously.
- When you send the request synchronously, you need to run the code in a child thread because the process may take a long time.
- When you send the request asynchronously, the system will create a child thread and run OkHttp3 code in it automatically.
5. OkHttp Get Post Request Example.
Источник
Сделайте HTTP-запрос с android
Я искал везде но не мог найти ответа, есть ли способ сделать простой HTTP-запрос? Я хочу запросить PHP-страницу / скрипт на одном из моих сайтов, но я не хочу показывать веб-страницу.
Если возможно, я даже хочу сделать это в фоновом режиме (в BroadcastReceiver)
11 ответов
обновление
это очень старый ответ. Я определенно больше не буду рекомендовать клиента Apache. Вместо этого используйте либо:
Оригинальный Ответ
прежде всего, запросите разрешение на доступ к сети, добавьте в манифест следующее:
тогда самый простой способ-использовать http-клиент Apache в комплекте с Android:
если вы хотите, чтобы он работал в отдельном потоке, я бы рекомендовал расширить AsyncTask:
затем вы можете сделать запрос по:
Если у вас нет явной причины выбрать Apache HttpClient, вы должны предпочесть java.сеть.URLConnection. вы можете найти множество примеров того, как использовать его в интернете.
мы также улучшили документацию Android с момента вашего первоначального сообщения:http://developer.android.com/reference/java/net/HttpURLConnection.html
Примечание: HTTP-клиент Apache в комплекте с Android теперь устарел в пользу HttpURLConnection. Пожалуйста, смотрите Android разработчиков блог для получения более подробной информации.
добавить к вашему манифесту.
затем вы получите веб-страницу следующим образом:
Я также предлагаю запустить его в отдельном потоке:
посмотреть документация для получения дополнительной информации об обработке ответов и POST запросы.
самый простой способ-использовать Android lib под названием волейбол
Volley предлагает следующие преимущества:
автоматическое планирование сетевых запросов. несколько параллельных сети соединения. Прозрачный диск и кэширование ответа памяти c стандартная согласованность кэша HTTP. Поддержка приоритизации запросов. API запроса на отмену. Вы можете отменить один запрос, или вы можете установить блоки или области запросы на отмену. Простота настройки для например, для retry и backoff. Сильный заказ, что позволяет легко правильно заполнить интерфейса извлечена данные асинхронно с сеть. Инструменты отладки и трассировки.
вы можете отправить запрос http / https так просто:
в этом случае вам не нужно рассматривать «запуск в фоновом режиме» или «использование кэша», поскольку все это уже было сделано Volley.
Источник
Android Http Get and Post Example with OkHttp
Posted by: Chryssa Aliferi in Android June 29th, 2016 0 Views
In this example, we are going to learn how to execute simple Http Get and Post requests from our Android Application. We are going to make use of the OkHTTP 3.0 library, where OkHTTP is an Open Source project designed to be an efficient HTTP client. The usage of this library is very simple and if you are using Gradle as build system you can simply add a dependency to your project
For this example we are using the following tools in a Windows 64-bit or an OS X platform:
- JDK 1.7
- Android Studio 2.1.2
- Android SDK 5.1
Let’s take a closer look:
1. Create a New Android Studio Project
Open Android Studio and choose “Start a new Android Studio Project” in the welcome screen.
“Welcome to Android Studio” screen. Choose “Start a new Android Studio Project”.
Specify the name of the application, the project and the package.
“Configure your new project” screen. Add your application name and the projects package name.
In the next window, select the form factors your app will run on.
“Target Android Devices” screen.
In the next window you should choose to “Add an activity to Mobile”. In our example, we will choose to create a project with no activity, so choose: “Add no activity”.
“Add an activity to Mobile”. Choose: “Add no activity”.
Now press finish, and our project has just been created!
2. Create the layout of the project
Add a new xml file inside /res/layout folder, with name main.xml . We should have /layout/main.xml file and paste the code below.
3. Creating the source code of the AndroidHttpPostGetActivity Activity
Add a new Java class inside src/com.javacodegeeks.com.javacodegeeks.androidhttppostgetexample/ so that we are going to have the src/com.javacodegeeks.com.javacodegeeks.androidhttppostgetexample/AndroidHttpPostGetActivity.java file and paste the code below.
4. AndroidManifest.xml
The AndroidManifest.xml of our project is simple and contains the essential INTERNET permission:
5. build.gradle
The build.gradle of our project is simple and contains the OkHttp3 import.
6. Build, compile and run
When we build, compile and run our project, the main AndroidMultitouchExample should look like this:
This is how our application looks.
7. Download the Android Studio Project
This was an example of Android Http Get and Post Example with OkHttp.
If you want to learn more about OkHttp you can visit the GitHub library here.
Источник