Intereting Posts
Android несколько EditText с OnTextChangedListener Ошибка медиаплеера Android (1, -1004) при воспроизведении потока с внешнего веб-сайта Android: обновить Listview после Thread загружает данные из сети E / Trace (640): файл трассировки ошибки: нет такого файла или каталога (2) Строка ListView не может быть нажата после добавления кнопки в строку Android TextSwitcher не смог обернуть ширину содержимого после заданного текста Как создать собственный шрифт в AndEngine? Не удается открыть файл, загруженный через диспетчер загрузки api WebView внутри NestedScrollView не прокручивается, когда в ответе веб-контента есть элемент iframe внутри него с высотой, установленной на 100% Радарная анимация Android SearchView onclick Платформы Android SDK между Linux и Windows Список зарезервированных слов в Android Плагин Android eclipse отстает от типа (3.6 – Helios) Разрешение отказа: get / set настройка для пользователя запрашивает запуск как пользователь -2, но вызывает пользователя 0

Android устарел модуль apache (HttpClient, HttpResponse и т. Д.)

Android отклонил модуль Apache с уровня API 22, поэтому мой вопрос: как я могу использовать, например HttpResponse из библиотеки Apache, а не из Android SDK? Проблема в том, что они одинаковы в обоих пакетах.

Но, например, HttpGet в порядке, потому что он называется HttpGetHC4 в Apache.

Метод HttpClient устарел. Теперь вы можете использовать URLConnection, как вы можете видеть в этом примере:

 private StringBuffer request(String urlString) { // TODO Auto-generated method stub StringBuffer chaine = new StringBuffer(""); try{ URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestProperty("User-Agent", ""); connection.setRequestMethod("POST"); connection.setDoInput(true); connection.connect(); InputStream inputStream = connection.getInputStream(); BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream)); String line = ""; while ((line = rd.readLine()) != null) { chaine.append(line); } } catch (IOException e) { // Writing exception to log e.printStackTrace(); } return chaine; } 

Надеюсь, это поможет кому-то.

В Android Marshmallow (sdk 23) вы можете добавить:

useLibrary 'org.apache.http.legacy'

Для сборки.gradle в разделе android {} в качестве обходного пути. Это, по-видимому, необходимо для некоторых собственных gsm-библиотек Google!

Нет ничего плохого в использовании модулей Apache. Google просто сделал большой беспорядок, потому что они не смогли сделать успешную вилку. Интеграция Google и Apache контролировалась Джесси Уилсоном – он работал в Google, все испортил, а затем создал свою собственную библиотеку (OkHttp) во время работы на площади. Это очень уродливая история.

Я советую использовать устаревший JAR-файл, потому что он содержит старую версию Apache-библиотек без улучшений и исправлений (это очень старый предварительный снимок BETA ). Как вы можете видеть на официальной странице компонентов Apache, есть новая версия 4.4, совместимая со всеми версиями Android. Его просто нужно было переупаковать в другом пространстве имен, чтобы избежать столкновения со старой версией.

Вы просто можете добавить зависимость от Maven (или загрузить версию из GitHub ):

 dependencies { compile "cz.msebera.android:httpclient:4.4.1.2" } 

А затем замените org.apache.http на cz.msebera.android.httpclient , поэтому ваш импорт будет выглядеть так:

 import cz.msebera.android.httpclient.Header; import cz.msebera.android.httpclient.HttpHost; import cz.msebera.android.httpclient.HttpResponse; 

Да, вы можете продолжать использовать библиотеки Apache, не тратя время на переработку рабочего кода!

Что касается разницы между использованием компонентов Apache и HttpURLConnection, HttpURLConnection использует кэширование responce … И это все. Я не уверен, что вы действительно этого хотите, и вы всегда можете реализовать его самостоятельно.

Кстати, я пробовал такие альтернативы, как HttpURLConnection – они даже не близки к силе и простоте Apache.

Если бы я был вами, я не использую HttpClient потому что:

У Apache HTTP-клиента меньше ошибок на Eclair и Froyo. Это лучший выбор для этих выпусков.

Для Gingerbread и лучше, HttpURLConnection – лучший выбор.

Справка

Используйте OKHttp или HttpUrlConnection . А также я рекомендую не использовать библиотеку Apache, потому что это может быть неэффективно для Android.

Я думаю, вы могли бы использовать библиотеки Apache непосредственно в своем проекте, а не те, которые поставлялись с Android (вы можете получить больше контроля таким образом – и скомпилируйте с более старой версией SDK, если вам нужно).

В своем build.gradle добавьте эту строку:

 dependencies { compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' } 

Чтобы предотвратить предупреждения, добавьте также эти строки:

 android { -- YOUR EXISTING LINES -- packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } } 

Добавьте это в зависимости от вашего приложения, а затем он будет работать правильно:

 dependencies { ... compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' } 

Если вы все еще хотите использовать библиотеку httpclient, вы должны добавить некоторое описание в файл build.gradle. И кажется, что контент, добавленный в файл build.gradle, определяется целевой целевой проекцией Android для.

Если он предназначен для API22 и старше, то следует добавить следующую строку в build.gradle

 dependencies { compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' } 

Если он предназначен для API23 и позже, то следует добавить следующую строку в build.gradle

 dependencies { compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1' } 

Вот ссылка

Используйте openConnection ().

Документация HttpClient предлагает это.

См. Этот ответ.