web-dev-qa-db-fra.com

'org.Apache.http.HttpEntity' est obsolète. Comment résoudre cette erreur dans le studio Android?

j'utilise Android studio API22 et j'ai ces erreurs:

'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

Comment puis-je résoudre ça?

14
Sml

Ajoutez ceci à votre note

useLibrary 'org.Apache.http.legacy'

Exemple

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

Citant moi-même :

Si vous devez continuer à utiliser l’API HttpClient, envisagez de basculer vers OkHttp et leur couche de compatibilité HttpClient, ou envisagez de basculer vers l’édition Android séparée de HttpClient de Apache. Sinon, passez à HttpURLConnection ou à l’API native d’OkHttp.

Ou, en fonction de l'utilisation que vous utilisez pour HttpClient, utilisez une bibliothèque réseau plus spécifique (Retrofit pour les services Web, Picasso ou Universal Image Loader pour les images, etc.).

Notez également que HttpClient est supprimé du SDK pour l'aperçu du développeur M, ce qui indique qu'il sera supprimé dans la prochaine édition d'Android. Bien qu'il existe une solution de contournement pour continuer à utiliser HttpClient dans M , vous devez vraiment passer à autre chose.

7
CommonsWare

La version du client HTTP Apache fournie en stock sur Android était très très ancienne .

Google Android 1.0 a été publié avec un instantané pré-BETA de Apache HttpClient. Pour coïncider avec la première version Android, les API Apache HttpClient 4.0 devaient être gelées prématurément, tandis que de nombreuses interfaces et structures internes n’étaient toujours pas entièrement élaborées. Alors qu'Apache HttpClient 4.0 arrivait à maturité, le projet s'attendait à ce que Google incorpore les dernières améliorations de code dans son arborescence de codes. Malheureusement, cela n’est pas arrivé.

Si vous ne souhaitez pas passer à une nouvelle API, vous pouvez ajouter manuellement une version plus récente de la bibliothèque Apache HttpClient dans votre projet pour remplacer l'ancienne version obsolète dans le SDK Android <22. 

Pour ce faire, le moyen le plus simple de cibler le SDK 23+ consiste à utiliser le nouveau package Apache HttpClient pour Android de Marek Sebera (comme suggéré par Apache ), qui peut potentiellement servir de remplacement instantané. Ajoutez simplement la dépendance suivante à votre fichier build.gradle (en mettant à jour le numéro de version si nécessaire):

compile "cz.msebera.Android:httpclient:4.4.1.1"

et remplacez import org.Apache.http.* par import cz.msebera.Android.httpclient.* partout dans votre projet.

Notez que de nombreuses classes de l'ancienne bibliothèque sont obsolètes (par exemple, HttpParams, ThreadSafeClientConnManager), donc la réécriture du code sera probablement une meilleure solution.


Edit: J'ai rencontré des cas dans lesquels les utilisateurs obtenaient des exceptions de délai d'expiration lorsqu'ils étaient derrière des serveurs proxy après la mise à jour vers le nouveau client Http. Comme le code est rempli d'avertissements obsolètes dans le monde entier, nous avons décidé que cela ne valait pas la peine d'essayer de résoudre le problème. Je recommande de tester très soigneusement avant d'essayer de le mettre en production.

Comme mentionné dans d'autres réponses, une solution bien meilleure consiste à mordre la balle et à basculer sur la version Android HttpUrlConnection native, ou si cela ne répond pas à vos besoins, vous pouvez utiliser la bibliothèque OkHttp, qui correspond à HttpUrlConnectionen interne basé sur de toute façon .

5
Tim Rae

HttpClient interprété à partir d'Android Lollypop 5.1 (API 22): -
Mais nous pouvons toujours utiliser HttpClient en utilisant le code suivant dans le studio Android: -
Aller au fichier app\build.gradle:

defaultConfig {
        applicationId "com.XXXXX.XXX"
        minSdkVersion 16
        targetSdkVersion 23
        -----------
        -----------

        useLibrary 'org.Apache.http.legacy'
    }

[OU ALTERNATIVE]


Téléchargez et ajoutez les fichiers HttpClient jar à votre projet ou utilisez okHttp .

3
Manas

Utiliser la dépendance suivante dans votre diplôme 

dependencies {
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
}
1
Muzammil Husnain

Téléchargez le fichier jar org.Apache.http.legacy à partir de ici .

Dans le fichier build.gradle, tapez le code suivant

defaultConfig {
      useLibrary 'org.Apache.http.legacy'
}

Enregistrez le fichier .jar téléchargé à l'emplacement suivant

./sdk/platforms/Android-23/optional/(.jar file)

J'utilise Android-23 sous des plates-formes, cela dépend du niveau d'API que vous utilisez. Si le dossier facultatif n'existe pas, créez-le et collez-y le fichier .jar avant de synchroniser le projet de dégradé.

0
Sumukh Bhandarkar

Ajoutez ceci à votre note

useLibrary 'org.Apache.http.legacy'

Exemple

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

Cette bibliothèque vous permettra de l'utiliser sans problème, du moins je n'ai eu aucun problème jusqu'à présent avec elle. 

0
Matt Barrera