Android отказался от модуля Apache с уровня API 22, поэтому мой вопрос: как я могу использовать, например, HttpResponse
из библиотеки Apache, а не из Android SDK? Проблема в том, что они одинаковы в обоих пакетах.
Но, например, HttpGet
в порядке, потому что он вызвал HttpGetHC4
в Apache.
Ответ 1
Метод 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;
}
Я надеюсь, что это поможет кому-то.
Ответ 2
Нет ничего плохого в использовании модулей 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 использует ответное кэширование... И все. Я не уверен, что вы действительно этого хотите, и вы всегда можете реализовать его самостоятельно.
Кстати, я пробовал альтернативы вроде HttpURLConnection - они даже не близки к мощности и простоте Apache.
Ответ 3
В Android Marshmallow (sdk 23) вы можете добавить:
useLibrary 'org.apache.http.legacy'
для сборки .gradle в разделе android {}
в качестве обходного пути. Это кажется необходимым для некоторых из собственных GMS-библиотек Google!
Ответ 4
Если бы я был вами, я не использую HttpClient
, потому что:
У Apache HTTP-клиента меньше ошибок на Eclair и Froyo. Это лучшее выбор для этих выпусков.
Для Gingerbread и лучше, HttpURLConnection - лучший выбор.
Ссылка
Используйте OKHttp или HttpUrlConnection. А также я рекомендую не использовать библиотеку Apache, потому что это может быть неэффективно для Android.
Ответ 5
Я думаю, вы могли бы использовать библиотеки 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'
}
}
Ответ 6
Добавьте это в зависимости от вашего приложения, а затем оно будет работать правильно:
dependencies {
...
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}
Ответ 7
Если вы хотите использовать библиотеку 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'
}
Вот ссылка ссылка
Ответ 8
Используйте openConnection().
Документация HttpClient предполагает, что.
Обратитесь к этому.