2010-12-12 15 views
14

Je n'arrive pas à faire fonctionner les HttpParams de l'API Android.Impossible de faire fonctionner HttpParams avec Postrequest

Je voulais simplement envoyer quelques paramètres simples avec ma Postrequest. Tout fonctionne bien, sauf pour les paramètres. Le code pour définir les paramètres à la postrequest:

HttpParams params = new BasicHttpParams(); 
params.setParameter("password", "secret"); 
params.setParameter("name", "testuser"); 
postRequest.setParams(params); 

Il semble que ce code n'ajoute un paramètre du tout, comme le serveur répond toujours, que ma demande ne contient pas le -parameter « name ».

Un exemple de ce qui fonctionne en fait comme prévu:

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
postParameters.add(new BasicNameValuePair("name", "testuser")); 
postParameters.add(new BasicNameValuePair("password", "secret")); 
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
postRequest.setEntity(formEntity); 

Mais je voudrais utiliser une version du premier exemple, car il est plus facile à lire et à comprendre.

Tout indice est vraiment apprécié!

+1

+1 - Même question ici ... commuté à l'aide de ArrayList et tout fonctionne maintenant ... ne comprends pas pourquoi la même logique avec HttpParams ne fonctionne pas! – Vladimir

Répondre

2

Une fois que j'ai eu le même problème, et je l'ai résolu de la même manière que vous l'avez fait ... Je me souviens avoir trouvé un sujet expliquant pourquoi cela ne fonctionnait pas. C'était quelque chose à propos de l'implémentation de la bibliothèque d'Apache du côté serveur. Malheureusement, je ne peux pas trouver ce sujet maintenant, mais si j'étais vous, je voudrais juste laisser le travail et ne vous inquiétez pas tellement de l '"élégance" du code, car il n'y a probablement pas grand-chose que vous pouvez faire, et si vous le pouvez, ce n'est pas pratique du tout.

+3

Oui, vous avez raison avec ça, mais je ne comprends pas. Pourquoi y a-t-il une API pour HttpParams si elle ne fonctionne pas du tout? –

1

Essayé de le faire fonctionner la première façon, mais il semble que l'interface HttpParams n'est pas destiné à être construit pour cela. Après avoir googlé pendant un certain temps, j'ai trouvé this SO answer expliquer:

L'interface HttpParams est pas là pour spécifier les paramètres de chaîne de requête, il est pour spécifier le comportement d'exécution de l'objet HttpClient.

La documentation est pas spécifique, bien que:

l'interface HttpParams représente une collection de valeurs immuables qui définissent un comportement d'exécution d'un composant.

Pour définir les délais d'attente de connexion et de demande, je l'ai utilisé un mélange des deux HttpParams et List<NameValuePair>, qui est entièrement fonctionnel et utilise la classe AndroidHttpClient, disponible à partir de l'API 8:

public HttpResponse securityCheck(String loginUrl, String name, String password) { 
    AndroidHttpClient client = AndroidHttpClient.newInstance(null); 
    HttpPost requestLogin = new HttpPost(
      loginUrl + "?"); 

    //Set my own params using NamaValuePairs 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("j_username", name)); 
    params.add(new BasicNameValuePair("j_password", password)); 

    //Set the timeouts using the wrapped HttpParams 
    HttpParams httpParameters = client.getParams(); 
    int timeoutConnection = 3000; 
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
    int timeoutSocket = 5000; 
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
    try { 
     requestLogin 
       .setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
     HttpResponse response = client.execute(requestLogin); 
     return response; 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage(), e); 
     return null; 
    }finally { 
     client.close(); 
    } 
} 

Voir aussi :