'org.apache.http.HttpEntity' устарел. Как решить эту ошибку в студии Android?
Я использую андроид-студию API22, и у меня эти ошибки:
'org.apache.http.HttpEntity' is deprecated
'org.apache.http.HttpResponse' is deprecated
'org.apache.http.NameValuePair' is deprecated
'org.apache.http.client.HttpClient' is deprecated
'org.apache.http.client.entity.UrlEncodedFormEntity' is deprecated
'org.apache.http.client.methods.HttpPost' is deprecated
'org.apache.http.impl.client.DefaultHttpClient' is deprecated
'org.apache.http.message.BasicNameValuePair' is deprecated
'org.apache.http.params.BasicHttpParams' is deprecated
'org.apache.http.params.HttpConnectionParams' is deprecated
'org.apache.http.params.HttpParams' is deprecated
'org.apache.http.util.EntityUtils' is deprecated
Как я могу это решить?
Ответы
Ответ 1
Добавьте это в свой gradle
useLibrary 'org.apache.http.legacy'
Пример
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 2
versionName "1.0.1"
}
buildTypes {
release {
debuggable false
signingConfig signingConfigs.releaseConfig
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debugSigned {
debuggable true
signingConfig signingConfigs.releaseConfig
}
debug {
debuggable true
}
}
useLibrary 'org.apache.http.legacy'
}
Ответ 2
Цитата :
Если вам нужно продолжить использование API HttpClient, подумайте о переходе на OkHttp и их уровень совместимости с HttpClient или подумайте о переходе на Апачи выделяют отдельную версию Android HttpClient. В противном случае переключитесь на HttpURLConnection или собственный интерфейс OkHttps.
Или, в зависимости от того, для чего вы используете HttpClient, используйте более конкретную сетевую библиотеку ( "Дооснащение для веб-служб, Picasso или универсальный загрузчик изображений для изображений" и т.д.).
Также обратите внимание, что HttpClient удален из SDK для M Developer Preview, указывая, что он будет удален в следующей версии Android. В то время как обходной путь для продолжения использования HttpClient в M, вам действительно нужно переместить что-то еще.
Ответ 3
Версия HTTP-клиента Apache, представленная на складе Android, была очень очень старой.
Google Android 1.0 был выпущен с моментальным снимком до BETA Apache HttpClient. Чтобы совпасть с первым выпуском Android, API Apache HttpClient 4.0 пришлось заморозить преждевременно, в то время как многие интерфейсы и внутренние структуры все еще не были полностью разработаны. Поскольку Apache HttpClient 4.0 созревал, проект ожидал, что Google включит последние улучшения кода в свое дерево кода. К сожалению, этого не произошло.
Если вы не хотите переключиться на новый API, вы можете вручную добавить новую версию библиотеки Apache HttpClient в свой проект, чтобы заменить устаревшую устаревшую версию в Android SDK < 22.
Самый простой способ сделать это при таргетинге на SDK 23+ - это использовать новый пакет Apache HttpClient для Android (как предложенный Apache), который потенциально может работать как замена. Просто добавьте следующую зависимость в файл build.gradle(при необходимости обновите номер версии):
compile "cz.msebera.android:httpclient:4.4.1.1"
и замените import org.apache.http.*
на import cz.msebera.android.httpclient.*
всюду в вашем проекте.
Обратите внимание, что многие классы из старой библиотеки устарели (например, HttpParams
, ThreadSafeClientConnManager
), поэтому переписывание кода, вероятно, будет лучшим решением.
Изменить: Я обнаружил некоторые случаи, когда пользователи получали исключения для тайм-аутов, когда за прокси-серверами мы обновлялись до нового клиента Http. Поскольку код полон устаревших предупреждений повсюду, мы решили, что это не стоит усилий, направленных на устранение проблемы. Я рекомендую тестировать очень тщательно, прежде чем пытаться поместить это в производство.
Как упоминалось в других ответах, гораздо лучшее решение - укусить пулю и переключиться на собственный Android HttpUrlConnection
, или если это не соответствует вашим потребностям, вы можете использовать библиотеку OkHttp
, которая что HttpUrlConnection
внутренне основано в любом случае.
Ответ 4
HttpClient удален из android lollypop 5.1 (API 22): -
Но все же мы можем использовать HttpClient, используя следующий код в студии Android: -
Перейти к файлу приложения \build.gradle:
defaultConfig {
applicationId "com.XXXXX.XXX"
minSdkVersion 16
targetSdkVersion 23
-----------
-----------
useLibrary 'org.apache.http.legacy'
}
[ИЛИ АЛЬТЕРНАТИВА]
Загрузите и добавьте файлы HttpClient jar в свой проект или используйте okHttp.
Ответ 5
Загрузите файл org.apache.http.legacy
jar из здесь.
В файле build.gradle
введите следующий код
defaultConfig {
useLibrary 'org.apache.http.legacy'
}
Сохраните загруженный файл .jar в следующем расположении
./sdk/platforms/android-23/optional/(.jar file)
Я использую android-23 под платформами, это зависит от того, какой уровень API вы используете. Если дополнительная папка не существует, создайте дополнительную папку и вставьте в нее файл .jar, прежде чем синхронизировать проект gradle.
Ответ 6
Используйте следующую зависимость в Gradle
dependencies {
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}
Ответ 7
Добавьте это в свой gradle
useLibrary 'org.apache.http.legacy'
Пример
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 2
versionName "1.0.1"
}
buildTypes {
release {
debuggable false
signingConfig signingConfigs.releaseConfig
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debugSigned {
debuggable true
signingConfig signingConfigs.releaseConfig
}
debug {
debuggable true
}
}
useLibrary 'org.apache.http.legacy'
}
Эта библиотека позволит вам использовать ее без проблем, по крайней мере, до сих пор у меня не было никаких проблем.