web-dev-qa-db-fra.com

HttpEntity est obsolète sur Android maintenant, quelle est l'alternative?

Avec la sortie de Android 5.1, il semble que tout le contenu HTTP d’Apache soit obsolète. Il est inutile de regarder la documentation.

This class was deprecated in API level 22. Please use openConnection() instead. Please visit this webpage for further details.

Ce qui est bien la première fois que vous le lisez, mais lorsque CHAQUE classe qui est obsolète le dit, ce n'est pas très utile.

Quoi qu'il en soit, quelles sont les alternatives pour des classes comme HttpEntity, plus précisément StringEntity et MultipartEntity? j'ai substitué BasicNameValuePair à mon propre implémentation de la classe Pair<T, S> d'Android, et il semble que URLEncoder.encode remplace avantageusement URLEncodedUtils, mais je ne sais pas quoi faire à propos de HttpEntity.

EDIT

J'ai juste décidé de réécrire le contenu du réseau. Va essayer d'utiliser Retrofit et OkHttp

EDIT

Sérieusement, jetez un coup d'œil sur le basculement de vos appels et autres choses vers Retrofit. Assez chouette. Je suis content de l'avoir fait. Il y a eu quelques obstacles, mais c'est cool.

44
joshkendrick

Vous pouvez toujours importer le dernier client Apache Http et l'utiliser. Vous pouvez également consulter une bibliothèque de réseau telle que Volley ou Retrofit , au cas où vous pourriez l’utiliser à la place. Si vous démarrez un nouveau projet, il est recommandé d’utiliser une bibliothèque réseau car il n’est pas nécessaire de réinventer la roue. Mais si vous êtes coincé avec HttpClient, continuez votre lecture.

EDIT: Dernières nouvelles sur Apache HttpClient (à partir du 11/07/2015)

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 intègre les dernières améliorations en matière de code dans son arborescence. Malheureusement, cela ne s'est pas produit. La version d'Apache HttpClient fournie avec Android est en réalité devenue un fork. Finalement, Google a décidé d’interrompre le développement de son fork en refusant de passer à la version stockée d’Apache HttpClient, invoquant des problèmes de compatibilité pour justifier cette décision. Par conséquent, les développeurs Android qui souhaitent continuer à utiliser les API Apache HttpClient sur Android ne peuvent pas tirer parti des nouvelles fonctionnalités, des améliorations de performances et des corrections de bugs. Le port Apache HttpClient 4.3 pour Android visait à remédier à la situation en fournissant des versions officielles compatibles avec Google Android. Etant donné qu'à partir de l'API Android 23, le fork de HttpClient de Google a été supprimé, ce projet a été interrompu.

Cependant, il existe un port officiel Android de Apache HttpClient v4.3

API Android 22 ans et plus devrait utiliser Apache HttpClient v4.3

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

Android API 23 et plus récente devrait utiliser les packages Apache HttpClient pour Android maintenus par Marek Sebera

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

Informations tirées de Apache.org

20
C0D3LIC1OU5

La documentation HttpClient vous oriente dans la bonne direction:

org.Apache.http.client.HttpClient:

Cette interface était obsolète dans l'API de niveau 22. Utilisez plutôt openConnection (). Veuillez visiter cette page Web pour plus de détails.

signifie que vous devez passer à Java.net.URL.openConnection().

Voici comment vous pouvez le faire:

Java.net.URL url = new Java.net.URL("http://some-server");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

// read the response
System.out.println("Response Code: " + conn.getResponseCode());
InputStream in = new BufferedInputStream(conn.getInputStream());
String response = org.Apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(response);
12
fateddy

Appelez webservice httpclient replace by httpurlconnection

mon code ici

public static String getDataFromUrl(String url) {
        String result = null;
//        System.out.println("URL comes in jsonparser class is:  " + url);
        try {
            URL myurl=new URL(url);
            HttpURLConnection urlConnection = (HttpURLConnection) myurl
                    .openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoInput(true);
            urlConnection.connect();
            InputStream is=urlConnection.getInputStream();
            if (is != null) {
                StringBuilder sb = new StringBuilder();
                String line;
                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(is));
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                    reader.close();
                } finally {
                  is.close();
                }
                result = sb.toString();
            }
        }catch (Exception e){
            result=null;
        }
        return result;
    }
2
Lakhan patidar