web-dev-qa-db-fra.com

Android obsolète le module Apache (HttpClient, HttpResponse, etc.)

Android ayant déprécié le module Apache depuis le niveau 22 de l'API, ma question est donc: comment utiliser, par exemple, HttpResponse de la bibliothèque Apache, et non de Android SDK? Le problème est-ce qu'ils sont les mêmes dans les deux paquets?.

Mais, par exemple, HttpGet va bien, parce que ça s'appelle HttpGetHC4 dans Apache.

58
Evgeniy

La méthode HttpClient était obsolète. Vous pouvez maintenant utiliser l'URLConnection comme vous pouvez le voir dans cet exemple:

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

J'espère que cela aide quelqu'un.

40
vincent091

Il n'y a rien de mal à utiliser les modules d'Apache. Google vient de tout gâcher, car ils n'ont pas réussi à créer un fork. L’intégration de Google et d’Apache était supervisée par Jesse Wilson: il travaillait dans Google, tout foirait puis créait sa propre bibliothèque (OkHttp) lors de travaux sur square. C'est une histoire vraiment laide.

Je déconseille d'utiliser le fichier JAR hérité, car il contient une ancienne version des bibliothèques Apache sans améliorations ni corrections de bogues (il s'agit d'un très ancien instantané pré-BETA ). Comme vous pouvez le voir sur la page officielle des composants Apache, il existe une nouvelle version 4.4, compatible avec toutes les versions de Android. Elle devait simplement être reconditionnée sous différents espace de noms pour éviter une collision avec l'ancienne version.

Vous pouvez simplement ajouter la dépendance de Maven (ou version téléchargeable de GitHub ):

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

Et puis remplacez org.Apache.http avec cz.msebera.Android.httpclient, vos importations ressembleront à ceci:

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

Oui, vous pouvez continuer à utiliser les bibliothèques Apache sans perdre de longues heures à réécrire du code fonctionnel!

En ce qui concerne la différence entre l'utilisation de composants Apache et HttpURLConnection, HttpURLConnection utilise le cache de rappel ... Et c'est tout. Je ne suis pas sûr que vous le vouliez vraiment et vous pouvez toujours le mettre en œuvre vous-même.

A propos, j’ai essayé des alternatives comme HttpURLConnection - elles ne sont même pas proches de la puissance et de la simplicité d’Apache.

27
Jehy

Dans Android Marshmallow (sdk 23), vous pouvez ajouter:

useLibrary 'org.Apache.http.legacy'

construire.gradle dans le Android {} section comme solution de contournement. Cela semble être nécessaire pour certaines des bibliothèques gms de Google!

22
fattire

Si j'étais vous, je n'utilise pas HttpClient parce que:

Le client HTTP Apache a moins de bugs sur Eclair et Froyo. C'est le meilleur choix pour ces versions.

HttpURLConnection est le meilleur choix pour le pain d’épice et mieux.

référence

Utilisez OKHttp ou HttpUrlConnection . Et aussi, je recommande de ne pas utiliser la bibliothèque Apache, car elle peut ne pas être efficace pour Android.

11
mmlooloo

Je suppose que vous pouvez utiliser les bibliothèques Apache directement dans votre projet, et non celles fournies avec Android (vous pouvez obtenir plus de contrôle de cette façon - et compiler avec une version plus ancienne du SDK si vous en avez besoin)). .

Dans votre build.gradle, ajoutez cette ligne:

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

Pour éviter les avertissements, ajoutez également ces lignes:

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
Vivi

Ajoutez ceci aux dépendances de votre application, et cela fonctionnera correctement:

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

Si vous souhaitez toujours utiliser la bibliothèque httpclient, vous devez ajouter une description au fichier build.gradle. Et il semble que le contenu ajouté au fichier build.gradle soit déterminé par la cible Android projet construit pour.

si ciblé pour API22 et plus ancien, alors devrait ajouter la ligne suivante dans build.gradle

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

si ciblé pour API23 et versions ultérieures, puis devrait ajouter la ligne suivante dans build.gradle

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

Voici la référence lien

1
A-Shi