Comment passer de HttpClient pour HttpUrlConnection?
Je suis entrain de créer une application Android et j'ai envoyer des données à partir de l'application Android de servlet par HttpClient. J'utilise HttpPost méthode.
J'ai lu dans Android site des développeurs d'Apache HttpClient bibliothèque a quelques bug sur Android Froyo 2.2 et après tout c'est une bonne pratique à utiliser HttpUrlConnection au lieu HttpPost. Donc, je veux convertir mon HttpPost code de HttpUrlConnectio mais ne savent pas comment.
Je vous poste mon code Android ainsi que servlet code ici
Android code
private String postData(String valueIWantToSend[])
{
//Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1",valueIWantToSend[0]));
nameValuePairs.add(new BasicNameValuePair("param2", valueIWantToSend[1]));
nameValuePairs.add(new BasicNameValuePair("param3", valueIWantToSend[2]));
nameValuePairs.add(new BasicNameValuePair("param4", valueIWantToSend[3]));
nameValuePairs.add(new BasicNameValuePair("param5", valueIWantToSend[4]));
nameValuePairs.add(new BasicNameValuePair("param6", valueIWantToSend[5]));
nameValuePairs.add(new BasicNameValuePair("param7", valueIWantToSend[6]));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
/* execute */
HttpResponse response = httpclient.execute(httppost);
HttpEntity rp = response.getEntity();
//origresponseText=readContent(response);
}
catch (ClientProtocolException e)
{
//TODO Auto-generated catch block
}
catch (IOException e)
{
//TODO Auto-generated catch block
}
return null;
}
et voici mon code de la servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//TODO Auto-generated method stub
response.setContentType("text/html");
ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
Enumeration paramNames = request.getParameterNames();
String params[] = new String[7];
int i=0;
while(paramNames.hasMoreElements())
{
String paramName = (String) paramNames.nextElement();
System.out.println(paramName);
String[] paramValues = request.getParameterValues(paramName);
params[i] = paramValues[0];
System.out.println(params[i]);
i++;
}
}
de bonnes pratiques pour l'utilisation HttpUrlConnection Aucun. Rester à l'écart. Mais il semble que vous utilisez une ancienne bibliothèque. Apache Http Composants est maintenant sur 4.3. Vous semblez toujours être sur 2.x.
donc, il n'y a pas de problème avec HttpClient ?
Il pourrait y avoir avec la bibliothèque que vous utilisez. Je ne sais pas. Mais
rester à l'écart.vous s'il vous plaît expliquer
donc, il n'y a pas de problème avec HttpClient ?
Il pourrait y avoir avec la bibliothèque que vous utilisez. Je ne sais pas. Mais
HttpUrlConnection
n'est pas un bon http client.rester à l'écart.vous s'il vous plaît expliquer
OriginalL'auteur Bhargav Thanki | 2014-11-12
Vous devez vous connecter pour publier un commentaire.
Vous devez absolument être à l'aide de
HttpUrlConnection
:Cependant, il n'est pas facile juste pour "passer". Les Api sont totalement différentes. Vous allez avoir à réécrire votre code réseau. Il y a des exemples parfaits dans la documentation sur la façon de soumettre un GET et POST demandes ainsi que le SDK exemples d'applications.
stackoverflow.com/a/13486223/1489860
thnks très bien
Pour ce que ça vaut, j'ai beaucoup de camion avec la déclaration publiée par Google. HttpUrlConnection est grande, mais il ya beaucoup de mécanismes en jeu avec la construction d'une URL avec des paramètres etc. HttpClient a été construite spécialement pour permettre à beaucoup plus fine grain de contrôle sur la façon dont une connexion HTTP est utilisé. Je pense que Google tente de sortir d'une bibliothèque qu'ils groupés et ne pas avoir de mise à jour propre chemin.
OriginalL'auteur Jeff Mixon
Quand j'ai lu le déjà mentionné Google post sur les meilleures pratiques de faire des requêtes HTTP dans les versions plus récentes d'Android, j'ai pensé que quelqu'un était moquez de moi.
HttpURLConnection
est vraiment un cauchemar à utiliser, par rapport à presque n'importe quel autre moyen de communiquer avec les serveurs HTTP (hormis la communication par Socket).Je n'ai pas trouvé un vraiment slim bibliothèque pour Android pour faire le gros du travail, j'ai donc écrit mon propre. Vous pouvez le trouver à DavidWebb y compris une liste de bibliothèques autre que j'ai trouvé (malheureusement) après le développement de la bibliothèque.
Votre code devrait ressembler à ceci:
OriginalL'auteur hgoebl
Vous n'avez pas à passer, vous pouvez continuer à utiliser apache bibliothèque comme je l'ai décrit dans cette réponse. Il n'y a vraiment pas d'inconvénients pour continuer à utiliser apache bibliothèque, seul google est du marketing.
Ouais, vous n'avez pas remarqué tout des inconvénients pendant des années. Allez voir le lien dans la réponse à certains détails.
OriginalL'auteur Jehy