'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'
}

Эта библиотека позволит вам использовать ее без проблем, по крайней мере, до сих пор у меня не было никаких проблем.